Version Description
= 3.0.3 = Please check changelog!
Download this release
Release Info
Developer | watchful |
Plugin | XCloner – Backup and Restore |
Version | 4.1.5 |
Comparing to | |
See all releases |
Code changes from version 4.1.4 to 4.1.5
- .distignore +4 -0
- .github/workflows/main.yml +21 -0
- README.txt +2 -2
- admin/css/materialize.clockpicker.css +0 -0
- admin/js/materialize.clockpicker.js +0 -0
- admin/js/xcloner-manage-backups-class.js +560 -374
- admin/js/xcloner-scheduler-class.js +252 -245
- docs/index.html +0 -0
- includes/class-xcloner-remote-storage.php +2 -2
- vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php +0 -0
- vendor/gliterd/backblaze-b2/CHANGELOG.md +0 -0
- vendor/gliterd/backblaze-b2/CONDUCT.md +0 -0
- vendor/gliterd/backblaze-b2/CONTRIBUTING.md +0 -0
- vendor/gliterd/backblaze-b2/LICENSE +0 -0
- vendor/gliterd/backblaze-b2/README.md +0 -0
- vendor/gliterd/backblaze-b2/composer.json +0 -0
- vendor/gliterd/backblaze-b2/phpunit.xml +0 -0
- vendor/gliterd/backblaze-b2/src/Bucket.php +0 -0
- vendor/gliterd/backblaze-b2/src/Client.php +0 -0
- vendor/gliterd/backblaze-b2/src/ErrorHandler.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/B2Exception.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/BadJsonException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/BadValueException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/BucketAlreadyExistsException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/BucketNotEmptyException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/FileNotPresentException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/NotFoundException.php +0 -0
- vendor/gliterd/backblaze-b2/src/Exceptions/ValidationException.php +0 -0
- vendor/gliterd/backblaze-b2/src/File.php +0 -0
- vendor/gliterd/backblaze-b2/src/Http/Client.php +0 -0
- vendor/gliterd/backblaze-b2/tests/ClientTest.php +0 -0
- vendor/gliterd/backblaze-b2/tests/TestHelper.php +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/authorize_account.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/bucket_not_empty.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/create_bucket_exists.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/create_bucket_private.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/create_bucket_public.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/delete_bucket.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/delete_bucket_non_existent.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/delete_file.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/delete_file_non_existent.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_id.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_path.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/download_content +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/get_file.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/get_file_non_existent.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/get_upload_url.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/list_buckets_0.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/list_buckets_3.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/list_files_empty.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/list_files_page1.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/list_files_page2.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_private.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_public.json +0 -0
- vendor/gliterd/backblaze-b2/tests/responses/upload.json +0 -0
- vendor/guzzlehttp/guzzle/.editorconfig +11 -0
- vendor/guzzlehttp/guzzle/.gitattributes +12 -0
- vendor/guzzlehttp/guzzle/.gitignore +11 -0
- vendor/guzzlehttp/guzzle/.travis.yml +50 -0
- vendor/guzzlehttp/guzzle/Makefile +59 -0
- vendor/guzzlehttp/guzzle/build/Burgomaster.php +385 -0
- vendor/guzzlehttp/guzzle/build/packager.php +27 -0
- vendor/guzzlehttp/guzzle/docs/Makefile +153 -0
- vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png +0 -0
- vendor/guzzlehttp/guzzle/docs/_static/logo.png +0 -0
- vendor/guzzlehttp/guzzle/docs/conf.py +68 -0
- vendor/guzzlehttp/guzzle/docs/faq.rst +193 -0
- vendor/guzzlehttp/guzzle/docs/handlers-and-middleware.rst +303 -0
- vendor/guzzlehttp/guzzle/docs/index.rst +54 -0
- vendor/guzzlehttp/guzzle/docs/overview.rst +161 -0
- vendor/guzzlehttp/guzzle/docs/psr7.rst +456 -0
- vendor/guzzlehttp/guzzle/docs/quickstart.rst +625 -0
- vendor/guzzlehttp/guzzle/docs/request-options.rst +1085 -0
- vendor/guzzlehttp/guzzle/docs/requirements.txt +2 -0
- vendor/guzzlehttp/guzzle/docs/testing.rst +196 -0
- vendor/guzzlehttp/guzzle/phpstan-baseline.neon +1412 -0
- vendor/guzzlehttp/guzzle/phpstan.neon.dist +8 -0
- vendor/guzzlehttp/guzzle/phpunit.xml.dist +22 -0
- vendor/guzzlehttp/psr7/.editorconfig +9 -0
- vendor/guzzlehttp/psr7/.gitattributes +7 -0
- vendor/guzzlehttp/psr7/.gitignore +4 -0
- vendor/guzzlehttp/psr7/.travis.yml +26 -0
- vendor/guzzlehttp/psr7/Makefile +29 -0
- vendor/guzzlehttp/psr7/phpunit.xml.dist +14 -0
- vendor/league/flysystem-sftp/.gitattributes +9 -0
- vendor/league/flysystem-sftp/.scrutinizer.yml +34 -0
- vendor/league/flysystem-sftp/.travis.yml +31 -0
- vendor/league/flysystem-sftp/changelog.md +78 -0
- vendor/league/flysystem-sftp/phpunit.hhvm.xml +23 -0
- vendor/league/flysystem-sftp/phpunit.xml +30 -0
- vendor/league/flysystem-sftp/tests/SftpAdapterTests.php +660 -0
- vendor/league/flysystem/.appveyor.yml +56 -0
- vendor/league/flysystem/.gitattributes +20 -0
- vendor/league/flysystem/.github/ISSUE_TEMPLATE/Bug.md +24 -0
- vendor/league/flysystem/.github/ISSUE_TEMPLATE/Feature_Request.md +21 -0
- vendor/league/flysystem/.github/ISSUE_TEMPLATE/Question.md +12 -0
- vendor/league/flysystem/.php_cs +31 -0
- vendor/league/flysystem/.scrutinizer.yml +33 -0
- vendor/league/flysystem/.travis.yml +46 -0
- vendor/league/flysystem/README.md +109 -0
- vendor/league/flysystem/changelog.md +403 -0
- vendor/league/flysystem/docs/CNAME +1 -0
- vendor/league/flysystem/docs/Gemfile +6 -0
- vendor/league/flysystem/docs/_config.yml +10 -0
- vendor/league/flysystem/docs/_data/menu.yml +38 -0
- vendor/league/flysystem/docs/_data/project.yml +5 -0
- vendor/league/flysystem/docs/_includes/carbon.html +1 -0
- vendor/league/flysystem/docs/_includes/size-helper.html +9 -0
- vendor/league/flysystem/docs/_layouts/default.html +99 -0
- vendor/league/flysystem/docs/adapter/aws-s3-v3.md +119 -0
- vendor/league/flysystem/docs/adapter/azure.md +36 -0
- vendor/league/flysystem/docs/adapter/digitalocean-spaces.md +37 -0
- vendor/league/flysystem/docs/adapter/dropbox.md +28 -0
- vendor/league/flysystem/docs/adapter/ftp.md +28 -0
- vendor/league/flysystem/docs/adapter/local.md +74 -0
- vendor/league/flysystem/docs/adapter/memory.md +23 -0
- vendor/league/flysystem/docs/adapter/null-test.md +19 -0
- vendor/league/flysystem/docs/adapter/phpcr.md +64 -0
- vendor/league/flysystem/docs/adapter/rackspace.md +31 -0
- vendor/league/flysystem/docs/adapter/replicate.md +23 -0
- vendor/league/flysystem/docs/adapter/sftp.md +29 -0
- vendor/league/flysystem/docs/adapter/webdav.md +20 -0
- vendor/league/flysystem/docs/adapter/zip-archive.md +29 -0
- vendor/league/flysystem/docs/advanced/caching.md +124 -0
- vendor/league/flysystem/docs/advanced/creating-an-adapter.md +57 -0
- vendor/league/flysystem/docs/advanced/mount-manager.md +78 -0
- vendor/league/flysystem/docs/advanced/performance.md +24 -0
- vendor/league/flysystem/docs/advanced/plugins.md +45 -0
- vendor/league/flysystem/docs/advanced/provided-plugins.md +42 -0
- vendor/league/flysystem/docs/advanced/upgrade-to-1.0.0.md +63 -0
- vendor/league/flysystem/docs/algolia.css +26 -0
- vendor/league/flysystem/docs/api.md +231 -0
- vendor/league/flysystem/docs/architecture.md +33 -0
- vendor/league/flysystem/docs/dist/main.js +1 -0
- vendor/league/flysystem/docs/dist/styles.css +1 -0
- vendor/league/flysystem/docs/favicon-16x16.png +0 -0
- vendor/league/flysystem/docs/favicon-32x32.png +0 -0
- vendor/league/flysystem/docs/favicon.ico +0 -0
- vendor/league/flysystem/docs/github.css +99 -0
- vendor/league/flysystem/docs/guides/deterministic-programming.md +71 -0
- vendor/league/flysystem/docs/guides/laravel-usage.md +18 -0
- vendor/league/flysystem/docs/guides/uploads.md +96 -0
- vendor/league/flysystem/docs/img/azure.svg +69 -0
- vendor/league/flysystem/docs/img/become_a_patron_button.png +0 -0
- vendor/league/flysystem/docs/img/flysystem.svg +1 -0
- vendor/league/flysystem/docs/img/laravel.svg +15 -0
- vendor/league/flysystem/docs/img/question.svg +7 -0
- vendor/league/flysystem/docs/index.css +132 -0
- vendor/league/flysystem/docs/index.js +44 -0
- vendor/league/flysystem/docs/index.md +53 -0
- vendor/league/flysystem/docs/package.json +25 -0
- vendor/league/flysystem/docs/postcss.config.js +7 -0
- vendor/league/flysystem/docs/sponsors.md +50 -0
- vendor/league/flysystem/docs/stubs/algolia.md +15 -0
- vendor/league/flysystem/docs/stubs/carbonads.md +18 -0
- vendor/league/flysystem/docs/tailwind.js +802 -0
- vendor/league/flysystem/docs/usage/filesystem-api.md +363 -0
- vendor/league/flysystem/docs/usage/setup.md +55 -0
- vendor/league/flysystem/docs/webpack.config.js +53 -0
- vendor/league/flysystem/docs/yarn.lock +5529 -0
- vendor/league/flysystem/phpspec.yml +6 -0
- vendor/league/flysystem/phpunit.php +20 -0
- vendor/league/flysystem/phpunit.xml +29 -0
- vendor/league/flysystem/spec/FilesystemSpec.php +225 -0
- vendor/league/flysystem/stub/FileOverwritingAdapterStub.php +117 -0
- vendor/league/flysystem/stub/FilesystemSpy.php +354 -0
- vendor/league/flysystem/stub/NotSupportingVisibilityStub.php +10 -0
- vendor/league/flysystem/stub/PluginStub.php +24 -0
- vendor/league/flysystem/stub/StreamedCopyStub.php +47 -0
- vendor/league/flysystem/stub/StreamedReadingStub.php +19 -0
- vendor/league/flysystem/stub/StreamedWritingStub.php +21 -0
- vendor/league/flysystem/tests/AdaptersThatCanOverwriteFilesTest.php +39 -0
- vendor/league/flysystem/tests/ConfigTests.php +30 -0
- vendor/league/flysystem/tests/EmptyDirPluginTests.php +31 -0
- vendor/league/flysystem/tests/FailTests.php +41 -0
- vendor/league/flysystem/tests/FileTests.php +215 -0
- vendor/league/flysystem/tests/FilesystemTests.php +466 -0
- vendor/league/flysystem/tests/FlysystemStreamTests.php +71 -0
- vendor/league/flysystem/tests/ForcedCopyPluginTests.php +46 -0
- vendor/league/flysystem/tests/ForcedRenamePluginTests.php +46 -0
- vendor/league/flysystem/tests/FtpTests.php +820 -0
- vendor/league/flysystem/tests/FtpdTests.php +79 -0
- vendor/league/flysystem/tests/GetWithMetadataTests.php +74 -0
- vendor/league/flysystem/tests/HandlerTests.php +154 -0
- vendor/league/flysystem/tests/ListFilesTests.php +34 -0
- vendor/league/flysystem/tests/ListPathsTests.php +33 -0
- vendor/league/flysystem/tests/ListWithTests.php +43 -0
- vendor/league/flysystem/tests/LocalAdapterTests.php +481 -0
- vendor/league/flysystem/tests/MountManagerTests.php +245 -0
- vendor/league/flysystem/tests/NotSupportingVisivilityTests.php +25 -0
- vendor/league/flysystem/tests/NullAdapterTests.php +103 -0
- vendor/league/flysystem/tests/PHPUnitHacks.php +34 -0
- vendor/league/flysystem/tests/PluginTests.php +107 -0
- vendor/league/flysystem/tests/StreamHasherTest.php +20 -0
- vendor/league/flysystem/tests/StreamedCopyPolyfilTests.php +41 -0
- vendor/league/flysystem/tests/StreamedReadingTraitTests.php +27 -0
- vendor/league/flysystem/tests/StreamedWritingPolyfillTests.php +32 -0
- vendor/league/flysystem/tests/UtilMimeTests.php +43 -0
- vendor/league/flysystem/tests/UtilTests.php +294 -0
- vendor/league/flysystem/tests/ftp/FtpIntegrationTestCase.php +100 -0
- vendor/league/flysystem/tests/ftp/FtpIntegrationTests.php +25 -0
- vendor/league/flysystem/tests/ftp/FtpManualRecursionIntegrationTests.php +25 -0
- vendor/league/flysystem/tests/ftp/FtpdIntegrationTests.php +25 -0
- vendor/league/flysystem/tests/ftp/FtpdManualRecursionIntegrationTests.php +25 -0
- vendor/league/flysystem/wait_for_ftp_service.php +20 -0
- vendor/mhetreramesh/flysystem-backblaze/CHANGELOG.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/CONDUCT.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/CONTRIBUTING.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/ISSUE_TEMPLATE.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/PULL_REQUEST_TEMPLATE.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/README.md +0 -0
- vendor/mhetreramesh/flysystem-backblaze/composer.json +0 -0
- vendor/mhetreramesh/flysystem-backblaze/src/BackblazeAdapter.php +0 -0
- vendor/mikey179/vfsStream +1 -0
- vendor/mtdowling/jmespath.php/bin/perf.php +0 -0
- vendor/phpseclib/phpseclib/travis/install-php-extensions.sh +0 -0
- vendor/phpseclib/phpseclib/travis/run-phpunit.sh +0 -0
- vendor/phpseclib/phpseclib/travis/setup-composer.sh +0 -0
- vendor/phpseclib/phpseclib/travis/setup-secure-shell.sh +0 -0
- vendor/phpseclib/phpseclib/travis/upload-code-coverage-html.sh +0 -0
- vendor/sabre/event/examples/promise.php +0 -0
- vendor/sabre/event/examples/tail.php +0 -0
- xcloner.php +1 -1
.distignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
docs/
|
2 |
+
package.json
|
3 |
+
.distignore
|
4 |
+
|
.github/workflows/main.yml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Deploy to WordPress.org
|
2 |
+
on:
|
3 |
+
push:
|
4 |
+
tags:
|
5 |
+
- "*"
|
6 |
+
jobs:
|
7 |
+
tag:
|
8 |
+
name: New tag
|
9 |
+
runs-on: ubuntu-latest
|
10 |
+
steps:
|
11 |
+
- uses: actions/checkout@master
|
12 |
+
- name: Build
|
13 |
+
run: |
|
14 |
+
npm install
|
15 |
+
npm run build
|
16 |
+
- name: WordPress Plugin Deploy
|
17 |
+
uses: 10up/action-wordpress-plugin-deploy@master
|
18 |
+
env:
|
19 |
+
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
|
20 |
+
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
|
21 |
+
SLUG: xcloner-backup-and-restore
|
README.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.xcloner.com
|
|
4 |
Tags: backup, database backup, cloud backup, WordPress backup, WordPress migration
|
5 |
Requires at least: 3.0.1
|
6 |
Tested up to: 5.4
|
7 |
-
Stable tag: 4.1.
|
8 |
|
9 |
XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
|
10 |
|
@@ -511,4 +511,4 @@ Of course, schedules can be adjusted accordingly to how often you update your si
|
|
511 |
== Upgrade Notice ==
|
512 |
|
513 |
= 3.0.3 =
|
514 |
-
Please check changelog!
|
4 |
Tags: backup, database backup, cloud backup, WordPress backup, WordPress migration
|
5 |
Requires at least: 3.0.1
|
6 |
Tested up to: 5.4
|
7 |
+
Stable tag: 4.1.5
|
8 |
|
9 |
XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
|
10 |
|
511 |
== Upgrade Notice ==
|
512 |
|
513 |
= 3.0.3 =
|
514 |
+
Please check changelog!
|
admin/css/materialize.clockpicker.css
CHANGED
File without changes
|
admin/js/materialize.clockpicker.js
CHANGED
File without changes
|
admin/js/xcloner-manage-backups-class.js
CHANGED
@@ -1,437 +1,623 @@
|
|
1 |
/** global: ajaxurl */
|
2 |
/** global: Materialize */
|
3 |
-
|
4 |
-
|
5 |
-
class Xcloner_Manage_Backups {
|
6 |
|
|
|
7 |
constructor() {
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
}
|
13 |
|
14 |
download_backup_by_name(id) {
|
15 |
-
|
16 |
-
|
17 |
}
|
18 |
|
19 |
delete_backup_by_name(id, elem, dataTable) {
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
}
|
|
|
40 |
}
|
41 |
|
42 |
list_backup_content_callback(backup_file, start = 0, part = 0) {
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
$this.file_counter++
|
68 |
-
|
69 |
-
files_text[i] = "<li>" + ($this.file_counter + ". <span title='" + response.files[i].mtime + "'>" + response.files[i].path + "</span> (" + response.files[i].size + " bytes)") + "</li>";
|
70 |
-
}
|
71 |
-
|
72 |
-
jQuery("#backup_cotent_modal .modal-content .files-list").prepend(files_text.reverse().join("\n"));
|
73 |
-
|
74 |
-
if (!response.finished && jQuery('#backup_cotent_modal').is(':visible')) {
|
75 |
-
$this.list_backup_content_callback(backup_file, response.start, response.part)
|
76 |
-
} else {
|
77 |
-
jQuery("#backup_cotent_modal .progress > div").addClass('determinate').removeClass(".indeterminate").css('width', "100%")
|
78 |
-
}
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
}
|
89 |
|
90 |
-
|
91 |
list_backup_content(backup_file) {
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
}
|
100 |
|
101 |
backup_encryption_callback(backup_file, start = 0, part = 0, iv = 0) {
|
102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
jQuery("#backup_encryption_modal .modal-content .files-list").text("Encrypting "+response.processing_file+" "+ parseInt(percent) + "%")
|
116 |
-
}
|
117 |
-
|
118 |
-
if (response.error) {
|
119 |
-
jQuery("#backup_encryption_modal .notice").show();
|
120 |
-
jQuery("#backup_encryption_modal .files-list").addClass("error").prepend(response.message+" ")
|
121 |
-
jQuery("#backup_encryption_modal .progress > div").addClass("determinate").removeClass("indeterminate").css('width', "100%")
|
122 |
-
return;
|
123 |
-
}
|
124 |
-
|
125 |
-
|
126 |
-
if (!response.finished && jQuery('#backup_encryption_modal').is(':visible')) {
|
127 |
-
$this.backup_encryption_callback(backup_file, response.start, response.part, response.iv)
|
128 |
-
} else {
|
129 |
-
jQuery("#backup_encryption_modal .progress > div").addClass('determinate').removeClass("indeterminate").css('width', "100%")
|
130 |
-
jQuery("#backup_encryption_modal .modal-content .files-list").text("Done Encrypting.")
|
131 |
-
dataTable.ajax.reload();
|
132 |
-
}
|
133 |
-
|
134 |
-
},
|
135 |
-
error: function (xhr, textStatus, error) {
|
136 |
-
jQuery("#backup_encryption_modal .files-list").addClass("error").prepend(textStatus + error)
|
137 |
-
},
|
138 |
-
dataType: 'json'
|
139 |
-
});
|
140 |
-
}
|
141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
}
|
143 |
|
144 |
-
|
145 |
backup_encryption(backup_file, start = 0) {
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
}
|
161 |
|
162 |
backup_decryption_callback(backup_file, start = 0, part = 0, iv = 0) {
|
163 |
-
|
164 |
-
|
165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
jQuery("#backup_decryption_modal .progress > div").removeClass('indeterminate').addClass("determinate");
|
179 |
-
var percent = parseInt(response.start * 100) / parseInt(response.total_size)
|
180 |
-
jQuery("#backup_decryption_modal .progress .determinate").css('width', parseInt(percent) + "%")
|
181 |
-
jQuery("#backup_decryption_modal .modal-content .files-list").text("Decrypting "+response.processing_file+" "+ parseInt(percent) + "%")
|
182 |
-
}
|
183 |
-
|
184 |
-
if (response.error) {
|
185 |
-
jQuery("#backup_decryption_modal .files-list").addClass("error").prepend(response.message+" ")
|
186 |
-
jQuery("#backup_decryption_modal .progress > div").addClass("determinate").removeClass("indeterminate").css('width', "100%")
|
187 |
-
jQuery("#backup_decryption_modal .notice").show();
|
188 |
-
return;
|
189 |
-
}
|
190 |
-
|
191 |
-
|
192 |
-
if (!response.finished && jQuery('#backup_decryption_modal').is(':visible')) {
|
193 |
-
$this.backup_decryption_callback(backup_file, response.start, response.part, response.iv)
|
194 |
-
} else {
|
195 |
-
jQuery("#backup_decryption_modal .progress > div").addClass('determinate').removeClass("indeterminate").css('width', "100%")
|
196 |
-
jQuery("#backup_decryption_modal .modal-content .files-list").text("Done Decrypting.")
|
197 |
-
dataTable.ajax.reload();
|
198 |
-
}
|
199 |
-
|
200 |
-
},
|
201 |
-
error: function (xhr, textStatus, error) {
|
202 |
-
jQuery("#backup_decryption_modal .files-list").addClass("error").prepend(textStatus + error)
|
203 |
-
},
|
204 |
-
dataType: 'json'
|
205 |
-
});
|
206 |
-
}
|
207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
}
|
209 |
|
210 |
backup_decryption(backup_file, start = 0) {
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
}
|
226 |
|
227 |
cloud_upload(backup_file) {
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
|
263 |
-
|
264 |
-
})
|
265 |
}
|
266 |
|
267 |
copy_remote_to_local(backup_file) {
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
|
|
|
|
|
|
|
|
|
|
293 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
}
|
295 |
|
296 |
//end class
|
297 |
-
}
|
298 |
-
|
299 |
-
jQuery(document).ready(function () {
|
300 |
|
|
|
301 |
var xcloner_manage_backups = new Xcloner_Manage_Backups();
|
302 |
|
303 |
-
xcloner_manage_backups.storage_selection = getUrlParam(
|
304 |
-
|
305 |
-
dataTable = jQuery(
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
buttons: {
|
316 |
-
selectAll: "Select all items",
|
317 |
-
selectNone: "Select none"
|
318 |
-
}
|
319 |
-
},
|
320 |
-
columnDefs: [
|
321 |
-
{targets: 'no-sort', orderable: false}
|
322 |
-
],
|
323 |
-
"columns": [
|
324 |
-
{"width": "1%"},
|
325 |
-
{"width": "25%"},
|
326 |
-
{"width": "5%"},
|
327 |
-
{"width": "5%"},
|
328 |
-
{"width": "9%"},
|
329 |
-
],
|
330 |
-
"oLanguage": {
|
331 |
-
"sSearch": "",
|
332 |
-
"sSearchPlaceholder": 'Search Backups',
|
333 |
},
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
jQuery(this).
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
404 |
});
|
405 |
|
406 |
-
jQuery(
|
407 |
-
|
408 |
});
|
409 |
|
410 |
jQuery(".delete-all").click(function () {
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
|
|
|
|
|
|
|
|
|
|
421 |
|
422 |
jQuery("#remote_storage_modal").modal();
|
423 |
jQuery("#local_storage_upload_modal").modal();
|
424 |
|
425 |
jQuery("#storage_selection").on("change", function () {
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
})
|
432 |
|
|
|
|
|
|
|
433 |
|
434 |
var show_delete_alert = 1;
|
435 |
-
|
436 |
-
|
437 |
-
});
|
1 |
/** global: ajaxurl */
|
2 |
/** global: Materialize */
|
3 |
+
(function ($) {
|
4 |
+
var dataTable = "";
|
|
|
5 |
|
6 |
+
class Xcloner_Manage_Backups {
|
7 |
constructor() {
|
8 |
+
this.file_counter = 0;
|
9 |
+
this.storage_selection = "";
|
10 |
+
this.dataTable = "";
|
11 |
+
//this.edit_modal = jQuery('.modal').modal();
|
12 |
}
|
13 |
|
14 |
download_backup_by_name(id) {
|
15 |
+
window.open(ajaxurl + "?action=download_backup_by_name&name=" + id);
|
16 |
+
return false;
|
17 |
}
|
18 |
|
19 |
delete_backup_by_name(id, elem, dataTable) {
|
20 |
+
var $this = this;
|
21 |
+
|
22 |
+
if (id) {
|
23 |
+
jQuery.ajax({
|
24 |
+
url: ajaxurl,
|
25 |
+
method: "post",
|
26 |
+
data: {
|
27 |
+
action: "delete_backup_by_name",
|
28 |
+
name: id,
|
29 |
+
storage_selection: this.storage_selection,
|
30 |
+
},
|
31 |
+
success: function (response) {
|
32 |
+
if (response.finished) {
|
33 |
+
dataTable.row(jQuery(elem).parents("tr")).remove().draw();
|
34 |
+
} else {
|
35 |
+
alert("There was an error deleting the file");
|
36 |
+
}
|
37 |
+
},
|
38 |
+
dataType: "json",
|
39 |
+
});
|
40 |
+
}
|
41 |
}
|
42 |
|
43 |
list_backup_content_callback(backup_file, start = 0, part = 0) {
|
44 |
+
var $this = this;
|
45 |
+
|
46 |
+
if (backup_file) {
|
47 |
+
jQuery.ajax({
|
48 |
+
url: ajaxurl,
|
49 |
+
method: "post",
|
50 |
+
data: {
|
51 |
+
action: "list_backup_files",
|
52 |
+
file: backup_file,
|
53 |
+
start: start,
|
54 |
+
part: part,
|
55 |
+
},
|
56 |
+
success: function (response) {
|
57 |
+
if (response.error) {
|
58 |
+
jQuery("#backup_cotent_modal .files-list")
|
59 |
+
.addClass("error")
|
60 |
+
.prepend(response.message);
|
61 |
+
jQuery("#backup_cotent_modal .progress > div")
|
62 |
+
.addClass("determinate")
|
63 |
+
.removeClass(".indeterminate")
|
64 |
+
.css("width", "100%");
|
65 |
+
return;
|
66 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
|
68 |
+
var files_text = [];
|
69 |
+
|
70 |
+
for (var i in response.files) {
|
71 |
+
if (response.total_size !== undefined) {
|
72 |
+
var percent =
|
73 |
+
parseInt(response.start * 100) /
|
74 |
+
parseInt(response.total_size);
|
75 |
+
//jQuery("#backup_cotent_modal .progress .determinate").css('width', percent + "%")
|
76 |
+
}
|
77 |
+
|
78 |
+
$this.file_counter++;
|
79 |
+
|
80 |
+
files_text[i] =
|
81 |
+
"<li>" +
|
82 |
+
($this.file_counter +
|
83 |
+
". <span title='" +
|
84 |
+
response.files[i].mtime +
|
85 |
+
"'>" +
|
86 |
+
response.files[i].path +
|
87 |
+
"</span> (" +
|
88 |
+
response.files[i].size +
|
89 |
+
" bytes)") +
|
90 |
+
"</li>";
|
91 |
+
}
|
92 |
|
93 |
+
jQuery("#backup_cotent_modal .modal-content .files-list").prepend(
|
94 |
+
files_text.reverse().join("\n")
|
95 |
+
);
|
96 |
+
|
97 |
+
if (
|
98 |
+
!response.finished &&
|
99 |
+
jQuery("#backup_cotent_modal").is(":visible")
|
100 |
+
) {
|
101 |
+
$this.list_backup_content_callback(
|
102 |
+
backup_file,
|
103 |
+
response.start,
|
104 |
+
response.part
|
105 |
+
);
|
106 |
+
} else {
|
107 |
+
jQuery("#backup_cotent_modal .progress > div")
|
108 |
+
.addClass("determinate")
|
109 |
+
.removeClass(".indeterminate")
|
110 |
+
.css("width", "100%");
|
111 |
+
}
|
112 |
+
},
|
113 |
+
error: function (xhr, textStatus, error) {
|
114 |
+
jQuery("#backup_cotent_modal .files-list")
|
115 |
+
.addClass("error")
|
116 |
+
.prepend(textStatus + error);
|
117 |
+
},
|
118 |
+
dataType: "json",
|
119 |
+
});
|
120 |
+
}
|
121 |
}
|
122 |
|
|
|
123 |
list_backup_content(backup_file) {
|
124 |
+
this.file_counter = 0;
|
125 |
+
jQuery("#backup_cotent_modal .modal-content .files-list")
|
126 |
+
.text("")
|
127 |
+
.removeClass("error");
|
128 |
+
jQuery("#backup_cotent_modal .modal-content .backup-name").text(
|
129 |
+
backup_file
|
130 |
+
);
|
131 |
+
jQuery("#backup_cotent_modal").modal("open");
|
132 |
+
jQuery("#backup_cotent_modal .progress > div")
|
133 |
+
.removeClass("determinate")
|
134 |
+
.addClass("indeterminate");
|
135 |
+
|
136 |
+
this.list_backup_content_callback(backup_file);
|
137 |
}
|
138 |
|
139 |
backup_encryption_callback(backup_file, start = 0, part = 0, iv = 0) {
|
140 |
+
var $this = this;
|
141 |
+
|
142 |
+
if (backup_file) {
|
143 |
+
jQuery.ajax({
|
144 |
+
url: ajaxurl,
|
145 |
+
method: "post",
|
146 |
+
data: {
|
147 |
+
action: "backup_encryption",
|
148 |
+
file: backup_file,
|
149 |
+
start: start,
|
150 |
+
part: part,
|
151 |
+
iv: iv,
|
152 |
+
},
|
153 |
+
success: function (response) {
|
154 |
+
if (response.total_size !== undefined) {
|
155 |
+
jQuery("#backup_encryption_modal .progress > div")
|
156 |
+
.removeClass("indeterminate")
|
157 |
+
.addClass("determinate");
|
158 |
+
var percent =
|
159 |
+
parseInt(response.start * 100) / parseInt(response.total_size);
|
160 |
+
jQuery("#backup_encryption_modal .progress .determinate").css(
|
161 |
+
"width",
|
162 |
+
parseInt(percent) + "%"
|
163 |
+
);
|
164 |
+
jQuery(
|
165 |
+
"#backup_encryption_modal .modal-content .files-list"
|
166 |
+
).text(
|
167 |
+
"Encrypting " +
|
168 |
+
response.processing_file +
|
169 |
+
" " +
|
170 |
+
parseInt(percent) +
|
171 |
+
"%"
|
172 |
+
);
|
173 |
+
}
|
174 |
|
175 |
+
if (response.error) {
|
176 |
+
jQuery("#backup_encryption_modal .notice").show();
|
177 |
+
jQuery("#backup_encryption_modal .files-list")
|
178 |
+
.addClass("error")
|
179 |
+
.prepend(response.message + " ");
|
180 |
+
jQuery("#backup_encryption_modal .progress > div")
|
181 |
+
.addClass("determinate")
|
182 |
+
.removeClass("indeterminate")
|
183 |
+
.css("width", "100%");
|
184 |
+
return;
|
185 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
+
if (
|
188 |
+
!response.finished &&
|
189 |
+
jQuery("#backup_encryption_modal").is(":visible")
|
190 |
+
) {
|
191 |
+
$this.backup_encryption_callback(
|
192 |
+
backup_file,
|
193 |
+
response.start,
|
194 |
+
response.part,
|
195 |
+
response.iv
|
196 |
+
);
|
197 |
+
} else {
|
198 |
+
jQuery("#backup_encryption_modal .progress > div")
|
199 |
+
.addClass("determinate")
|
200 |
+
.removeClass("indeterminate")
|
201 |
+
.css("width", "100%");
|
202 |
+
jQuery(
|
203 |
+
"#backup_encryption_modal .modal-content .files-list"
|
204 |
+
).text("Done Encrypting.");
|
205 |
+
dataTable.ajax.reload();
|
206 |
+
}
|
207 |
+
},
|
208 |
+
error: function (xhr, textStatus, error) {
|
209 |
+
jQuery("#backup_encryption_modal .files-list")
|
210 |
+
.addClass("error")
|
211 |
+
.prepend(textStatus + error);
|
212 |
+
},
|
213 |
+
dataType: "json",
|
214 |
+
});
|
215 |
+
}
|
216 |
}
|
217 |
|
|
|
218 |
backup_encryption(backup_file, start = 0) {
|
219 |
+
this.file_counter = 0;
|
220 |
+
|
221 |
+
jQuery("#backup_encryption_modal .modal-content .backup-name").text(
|
222 |
+
backup_file
|
223 |
+
);
|
224 |
+
jQuery("#backup_encryption_modal").modal("open");
|
225 |
+
jQuery("#backup_encryption_modal .progress > div");
|
226 |
+
jQuery("#backup_encryption_modal .notice").show();
|
227 |
+
|
228 |
+
jQuery("#backup_encryption_modal a.btn").attr(
|
229 |
+
"onclick",
|
230 |
+
"var xcloner_manage_backups = new Xcloner_Manage_Backups();xcloner_manage_backups.backup_encryption('" +
|
231 |
+
backup_file +
|
232 |
+
"', true)"
|
233 |
+
);
|
234 |
+
jQuery("#backup_encryption_modal .modal-content .files-list")
|
235 |
+
.text("")
|
236 |
+
.removeClass("error");
|
237 |
+
|
238 |
+
if (start) {
|
239 |
+
jQuery("#backup_encryption_modal .notice").hide();
|
240 |
+
this.backup_encryption_callback(backup_file);
|
241 |
+
}
|
242 |
}
|
243 |
|
244 |
backup_decryption_callback(backup_file, start = 0, part = 0, iv = 0) {
|
245 |
+
var $this = this;
|
246 |
+
|
247 |
+
var decryption_key = jQuery(
|
248 |
+
"#backup_decryption_modal #decryption_key"
|
249 |
+
).val();
|
250 |
+
|
251 |
+
if (backup_file) {
|
252 |
+
jQuery.ajax({
|
253 |
+
url: ajaxurl,
|
254 |
+
method: "post",
|
255 |
+
data: {
|
256 |
+
action: "backup_decryption",
|
257 |
+
file: backup_file,
|
258 |
+
start: start,
|
259 |
+
part: part,
|
260 |
+
iv: iv,
|
261 |
+
decryption_key: decryption_key,
|
262 |
+
},
|
263 |
+
success: function (response) {
|
264 |
+
if (!response.start) {
|
265 |
+
response.start = 0;
|
266 |
+
}
|
267 |
+
if (response.total_size !== undefined) {
|
268 |
+
jQuery("#backup_decryption_modal .progress > div")
|
269 |
+
.removeClass("indeterminate")
|
270 |
+
.addClass("determinate");
|
271 |
+
var percent =
|
272 |
+
parseInt(response.start * 100) / parseInt(response.total_size);
|
273 |
+
jQuery("#backup_decryption_modal .progress .determinate").css(
|
274 |
+
"width",
|
275 |
+
parseInt(percent) + "%"
|
276 |
+
);
|
277 |
+
jQuery(
|
278 |
+
"#backup_decryption_modal .modal-content .files-list"
|
279 |
+
).text(
|
280 |
+
"Decrypting " +
|
281 |
+
response.processing_file +
|
282 |
+
" " +
|
283 |
+
parseInt(percent) +
|
284 |
+
"%"
|
285 |
+
);
|
286 |
+
}
|
287 |
|
288 |
+
if (response.error) {
|
289 |
+
jQuery("#backup_decryption_modal .files-list")
|
290 |
+
.addClass("error")
|
291 |
+
.prepend(response.message + " ");
|
292 |
+
jQuery("#backup_decryption_modal .progress > div")
|
293 |
+
.addClass("determinate")
|
294 |
+
.removeClass("indeterminate")
|
295 |
+
.css("width", "100%");
|
296 |
+
jQuery("#backup_decryption_modal .notice").show();
|
297 |
+
return;
|
298 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
|
300 |
+
if (
|
301 |
+
!response.finished &&
|
302 |
+
jQuery("#backup_decryption_modal").is(":visible")
|
303 |
+
) {
|
304 |
+
$this.backup_decryption_callback(
|
305 |
+
backup_file,
|
306 |
+
response.start,
|
307 |
+
response.part,
|
308 |
+
response.iv
|
309 |
+
);
|
310 |
+
} else {
|
311 |
+
jQuery("#backup_decryption_modal .progress > div")
|
312 |
+
.addClass("determinate")
|
313 |
+
.removeClass("indeterminate")
|
314 |
+
.css("width", "100%");
|
315 |
+
jQuery(
|
316 |
+
"#backup_decryption_modal .modal-content .files-list"
|
317 |
+
).text("Done Decrypting.");
|
318 |
+
dataTable.ajax.reload();
|
319 |
+
}
|
320 |
+
},
|
321 |
+
error: function (xhr, textStatus, error) {
|
322 |
+
jQuery("#backup_decryption_modal .files-list")
|
323 |
+
.addClass("error")
|
324 |
+
.prepend(textStatus + error);
|
325 |
+
},
|
326 |
+
dataType: "json",
|
327 |
+
});
|
328 |
+
}
|
329 |
}
|
330 |
|
331 |
backup_decryption(backup_file, start = 0) {
|
332 |
+
this.file_counter = 0;
|
333 |
+
|
334 |
+
jQuery("#backup_decryption_modal .modal-content .backup-name").text(
|
335 |
+
backup_file
|
336 |
+
);
|
337 |
+
jQuery("#backup_decryption_modal").modal("open");
|
338 |
+
jQuery("#backup_decryption_modal .progress > div");
|
339 |
+
jQuery("#backup_decryption_modal .notice").show();
|
340 |
+
|
341 |
+
jQuery("#backup_decryption_modal a.btn").attr(
|
342 |
+
"onclick",
|
343 |
+
"var xcloner_manage_backups = new Xcloner_Manage_Backups();xcloner_manage_backups.backup_decryption('" +
|
344 |
+
backup_file +
|
345 |
+
"', true)"
|
346 |
+
);
|
347 |
+
jQuery("#backup_decryption_modal .modal-content .files-list")
|
348 |
+
.text("")
|
349 |
+
.removeClass("error");
|
350 |
+
|
351 |
+
if (start) {
|
352 |
+
jQuery("#backup_decryption_modal .notice").hide();
|
353 |
+
this.backup_decryption_callback(backup_file);
|
354 |
+
}
|
355 |
}
|
356 |
|
357 |
cloud_upload(backup_file) {
|
358 |
+
jQuery("#remote_storage_modal").find(".backup_name").text(backup_file);
|
359 |
+
jQuery("#remote_storage_modal")
|
360 |
+
.find("input.backup_name")
|
361 |
+
.val(backup_file);
|
362 |
+
Materialize.updateTextFields();
|
363 |
+
jQuery(".col select").material_select();
|
364 |
+
jQuery("#remote_storage_modal").modal("open");
|
365 |
+
jQuery("#remote_storage_modal .status").hide();
|
366 |
+
|
367 |
+
jQuery(".remote-storage-form")
|
368 |
+
.off("submit")
|
369 |
+
.on("submit", function () {
|
370 |
+
jQuery("#remote_storage_modal .status").show();
|
371 |
+
jQuery("#remote_storage_modal .status .progress .indeterminate")
|
372 |
+
.removeClass("determinate")
|
373 |
+
.css("width", "0%");
|
374 |
+
jQuery("#remote_storage_modal .status-text")
|
375 |
+
.removeClass("error")
|
376 |
+
.text("");
|
377 |
+
|
378 |
+
var storage_type = jQuery("#remote_storage_modal select").val();
|
379 |
+
|
380 |
+
if (backup_file) {
|
381 |
+
jQuery.ajax({
|
382 |
+
url: ajaxurl,
|
383 |
+
method: "post",
|
384 |
+
data: {
|
385 |
+
action: "upload_backup_to_remote",
|
386 |
+
file: backup_file,
|
387 |
+
storage_type: storage_type,
|
388 |
+
},
|
389 |
+
success: function (response) {
|
390 |
+
if (response.error) {
|
391 |
+
jQuery("#remote_storage_modal .status-text")
|
392 |
+
.addClass("error")
|
393 |
+
.text(response.message);
|
394 |
+
} else {
|
395 |
+
jQuery("#remote_storage_modal .status-text")
|
396 |
+
.removeClass("error")
|
397 |
+
.text("done");
|
398 |
+
}
|
399 |
+
|
400 |
+
jQuery("#remote_storage_modal .status .progress .indeterminate")
|
401 |
+
.addClass("determinate")
|
402 |
+
.css("width", "100%");
|
403 |
+
},
|
404 |
+
error: function (xhr, textStatus, error) {
|
405 |
+
jQuery("#remote_storage_modal .status-text")
|
406 |
+
.addClass("error")
|
407 |
+
.text(textStatus + error);
|
408 |
+
},
|
409 |
+
dataType: "json",
|
410 |
+
});
|
411 |
+
}
|
412 |
|
413 |
+
return false;
|
414 |
+
});
|
415 |
}
|
416 |
|
417 |
copy_remote_to_local(backup_file) {
|
418 |
+
jQuery("#local_storage_upload_modal").modal("open");
|
419 |
+
jQuery("#local_storage_upload_modal .modal-content .backup-name").text(
|
420 |
+
backup_file
|
421 |
+
);
|
422 |
+
jQuery("#local_storage_upload_modal .status-text")
|
423 |
+
.removeClass("error")
|
424 |
+
.text("");
|
425 |
+
jQuery("#local_storage_upload_modal .status .progress .indeterminate")
|
426 |
+
.removeClass("determinate")
|
427 |
+
.css("width", "0%");
|
428 |
+
|
429 |
+
if (backup_file) {
|
430 |
+
jQuery.ajax({
|
431 |
+
url: ajaxurl,
|
432 |
+
method: "post",
|
433 |
+
data: {
|
434 |
+
action: "copy_backup_remote_to_local",
|
435 |
+
file: backup_file,
|
436 |
+
storage_type: this.storage_selection,
|
437 |
+
},
|
438 |
+
success: function (response) {
|
439 |
+
if (response.error) {
|
440 |
+
jQuery("#local_storage_upload_modal .status-text")
|
441 |
+
.addClass("error")
|
442 |
+
.text(response.message);
|
443 |
+
} else {
|
444 |
+
jQuery("#local_storage_upload_modal .status-text")
|
445 |
+
.removeClass("error")
|
446 |
+
.text("done");
|
447 |
+
}
|
448 |
|
449 |
+
jQuery(
|
450 |
+
"#local_storage_upload_modal .status .progress .indeterminate"
|
451 |
+
)
|
452 |
+
.addClass("determinate")
|
453 |
+
.css("width", "100%");
|
454 |
+
},
|
455 |
+
error: function (xhr, textStatus, error) {
|
456 |
+
jQuery("#local_storage_upload_modal .status-text")
|
457 |
+
.addClass("error")
|
458 |
+
.text(textStatus + error);
|
459 |
+
},
|
460 |
+
dataType: "json",
|
461 |
+
});
|
462 |
+
}
|
463 |
}
|
464 |
|
465 |
//end class
|
466 |
+
}
|
|
|
|
|
467 |
|
468 |
+
jQuery(document).ready(function () {
|
469 |
var xcloner_manage_backups = new Xcloner_Manage_Backups();
|
470 |
|
471 |
+
xcloner_manage_backups.storage_selection = getUrlParam("storage_selection");
|
472 |
+
|
473 |
+
dataTable = jQuery("#manage_backups").DataTable({
|
474 |
+
responsive: true,
|
475 |
+
bFilter: true,
|
476 |
+
order: [[2, "desc"]],
|
477 |
+
buttons: ["selectAll", "selectNone"],
|
478 |
+
language: {
|
479 |
+
emptyTable: "No backups available",
|
480 |
+
buttons: {
|
481 |
+
selectAll: "Select all items",
|
482 |
+
selectNone: "Select none",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
483 |
},
|
484 |
+
},
|
485 |
+
columnDefs: [{ targets: "no-sort", orderable: false }],
|
486 |
+
columns: [
|
487 |
+
{ width: "1%" },
|
488 |
+
{ width: "25%" },
|
489 |
+
{ width: "5%" },
|
490 |
+
{ width: "5%" },
|
491 |
+
{ width: "9%" },
|
492 |
+
],
|
493 |
+
oLanguage: {
|
494 |
+
sSearch: "",
|
495 |
+
sSearchPlaceholder: "Search Backups",
|
496 |
+
},
|
497 |
+
ajax:
|
498 |
+
ajaxurl +
|
499 |
+
"?action=get_manage_backups_list&storage_selection=" +
|
500 |
+
xcloner_manage_backups.storage_selection,
|
501 |
+
fnDrawCallback: function (oSettings) {
|
502 |
+
jQuery("a.expand-multipart").on("click", function () {
|
503 |
+
jQuery(this).parent().find("ul.multipart").toggle();
|
504 |
+
jQuery(this).parent().find("a.expand-multipart.remove").toggle();
|
505 |
+
jQuery(this).parent().find("a.expand-multipart.add").toggle();
|
506 |
+
});
|
507 |
+
|
508 |
+
jQuery(this)
|
509 |
+
.off("click", ".delete")
|
510 |
+
.on("click", ".delete", function (e) {
|
511 |
+
var hash = jQuery(this).attr("href");
|
512 |
+
var id = hash.substr(1);
|
513 |
+
var data = "";
|
514 |
+
|
515 |
+
if (show_delete_alert) {
|
516 |
+
if (confirm("Are you sure you want to delete it?")) {
|
517 |
+
xcloner_manage_backups.delete_backup_by_name(
|
518 |
+
id,
|
519 |
+
this,
|
520 |
+
dataTable
|
521 |
+
);
|
522 |
+
}
|
523 |
+
} else {
|
524 |
+
xcloner_manage_backups.delete_backup_by_name(id, this, dataTable);
|
525 |
+
}
|
526 |
|
527 |
+
e.preventDefault();
|
528 |
+
});
|
529 |
+
|
530 |
+
jQuery(this)
|
531 |
+
.off("click", ".download")
|
532 |
+
.on("click", ".download", function (e) {
|
533 |
+
var hash = jQuery(this).attr("href");
|
534 |
+
var id = hash.substr(1);
|
535 |
+
xcloner_manage_backups.download_backup_by_name(id);
|
536 |
+
e.preventDefault();
|
537 |
+
});
|
538 |
+
|
539 |
+
jQuery(this)
|
540 |
+
.off("click", ".cloud-upload")
|
541 |
+
.on("click", ".cloud-upload", function (e) {
|
542 |
+
var hash = jQuery(this).attr("href");
|
543 |
+
var id = hash.substr(1);
|
544 |
+
xcloner_manage_backups.cloud_upload(id);
|
545 |
+
e.preventDefault();
|
546 |
+
});
|
547 |
+
|
548 |
+
jQuery(this)
|
549 |
+
.off("click", ".copy-remote-to-local")
|
550 |
+
.on("click", ".copy-remote-to-local", function (e) {
|
551 |
+
var hash = jQuery(this).attr("href");
|
552 |
+
var id = hash.substr(1);
|
553 |
+
xcloner_manage_backups.copy_remote_to_local(id);
|
554 |
+
e.preventDefault();
|
555 |
+
});
|
556 |
+
|
557 |
+
jQuery(this)
|
558 |
+
.off("click", ".list-backup-content")
|
559 |
+
.on("click", ".list-backup-content", function (e) {
|
560 |
+
var hash = jQuery(this).attr("href");
|
561 |
+
var id = hash.substr(1);
|
562 |
+
xcloner_manage_backups.list_backup_content(id);
|
563 |
+
e.preventDefault();
|
564 |
+
});
|
565 |
+
|
566 |
+
jQuery(this)
|
567 |
+
.off("click", ".backup-encryption")
|
568 |
+
.on("click", ".backup-encryption", function (e) {
|
569 |
+
var hash = jQuery(this).attr("href");
|
570 |
+
var id = hash.substr(1);
|
571 |
+
xcloner_manage_backups.backup_encryption(id);
|
572 |
+
e.preventDefault();
|
573 |
+
});
|
574 |
+
|
575 |
+
jQuery(this)
|
576 |
+
.off("click", ".backup-decryption")
|
577 |
+
.on("click", ".backup-decryption", function (e) {
|
578 |
+
var hash = jQuery(this).attr("href");
|
579 |
+
var id = hash.substr(1);
|
580 |
+
xcloner_manage_backups.backup_decryption(id);
|
581 |
+
e.preventDefault();
|
582 |
+
});
|
583 |
+
},
|
584 |
});
|
585 |
|
586 |
+
jQuery("#select_all").click(function () {
|
587 |
+
jQuery("input:checkbox").prop("checked", this.checked);
|
588 |
});
|
589 |
|
590 |
jQuery(".delete-all").click(function () {
|
591 |
+
if (confirm("Are you sure you want to delete selected items?")) {
|
592 |
+
show_delete_alert = 0;
|
593 |
+
jQuery("input:checkbox").each(function () {
|
594 |
+
if (jQuery(this).is(":checked")) {
|
595 |
+
jQuery(this)
|
596 |
+
.parent()
|
597 |
+
.parent()
|
598 |
+
.parent()
|
599 |
+
.find(".delete")
|
600 |
+
.trigger("click");
|
601 |
+
}
|
602 |
+
});
|
603 |
+
show_delete_alert = 1;
|
604 |
+
}
|
605 |
+
});
|
606 |
|
607 |
jQuery("#remote_storage_modal").modal();
|
608 |
jQuery("#local_storage_upload_modal").modal();
|
609 |
|
610 |
jQuery("#storage_selection").on("change", function () {
|
611 |
+
window.location =
|
612 |
+
window.location.href.split("&storage_selection")[0] +
|
613 |
+
"&storage_selection=" +
|
614 |
+
jQuery(this).val();
|
615 |
+
});
|
|
|
616 |
|
617 |
+
jQuery(".modal").on("hide", function () {
|
618 |
+
alert("ok");
|
619 |
+
});
|
620 |
|
621 |
var show_delete_alert = 1;
|
622 |
+
});
|
623 |
+
})(jQuery);
|
|
admin/js/xcloner-scheduler-class.js
CHANGED
@@ -2,250 +2,257 @@
|
|
2 |
/** global: Materialize */
|
3 |
/** global: dataTable */
|
4 |
|
5 |
-
jQuery(document).ready(function(){
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
if(id){
|
24 |
-
jQuery.ajax({
|
25 |
-
url: ajaxurl,
|
26 |
-
data: { action : 'get_schedule_by_id', id: id},
|
27 |
-
success: function(response){
|
28 |
-
if(response.id == id)
|
29 |
-
{
|
30 |
-
$this.create_modal(response)
|
31 |
-
}
|
32 |
-
},
|
33 |
-
dataType: 'json'
|
34 |
-
});
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
delete_schedule_by_id(id, elem, dataTable)
|
39 |
-
{
|
40 |
-
var $this = this
|
41 |
-
|
42 |
-
if(id){
|
43 |
-
jQuery.ajax({
|
44 |
-
url: ajaxurl,
|
45 |
-
data: { action : 'delete_schedule_by_id', id: id},
|
46 |
-
success: function(response){
|
47 |
-
//window.location = "";
|
48 |
-
//console.log('schedule deleted');
|
49 |
-
//alert("Schedule deleted");
|
50 |
-
jQuery(elem).parents('tr').remove();
|
51 |
-
dataTable
|
52 |
-
.row( jQuery(elem).parents('tr') )
|
53 |
-
.remove()
|
54 |
-
.draw();
|
55 |
-
},
|
56 |
-
dataType: 'json'
|
57 |
-
});
|
58 |
-
}
|
59 |
-
}
|
60 |
-
|
61 |
-
create_modal(response)
|
62 |
-
{
|
63 |
-
this.edit_modal.find("#schedule_id").text(response.id)
|
64 |
-
|
65 |
-
if(response.status == 1)
|
66 |
-
{
|
67 |
-
this.edit_modal.find("#status").attr("checked", "checked");
|
68 |
-
}
|
69 |
-
else
|
70 |
-
{
|
71 |
-
this.edit_modal.find("#status").removeAttr("checked");
|
72 |
-
}
|
73 |
-
|
74 |
-
this.edit_modal.find("#schedule_id").text(response.id)
|
75 |
-
this.edit_modal.find("#schedule_id_hidden").val(response.id)
|
76 |
-
this.edit_modal.find("#schedule_name").val(response.name)
|
77 |
-
this.edit_modal.find("#backup_name").val(response.backup_params.backup_name)
|
78 |
-
this.edit_modal.find("#email_notification").val(response.backup_params.email_notification)
|
79 |
-
this.edit_modal.find("#diff_start_date").val(response.backup_params.diff_start_date)
|
80 |
-
this.edit_modal.find('#schedule_frequency>option[value="' + response.recurrence + '"]').prop('selected', true);
|
81 |
-
this.edit_modal.find('#backup_type>option[value="' + response.backup_type + '"]').prop('selected', true);
|
82 |
-
this.edit_modal.find('#schedule_storage>option[value="' + response.remote_storage + '"]').prop('selected', true);
|
83 |
-
//var date = new Date(response.start_at);
|
84 |
-
this.edit_modal.find("#schedule_start_date").val(response.start_at)
|
85 |
-
|
86 |
-
|
87 |
-
if(response.backup_params.backup_encrypt !== undefined && response.backup_params.backup_encrypt == 1) {
|
88 |
-
this.edit_modal.find('#backup_encrypt').attr('checked', 'checked')
|
89 |
}
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
});
|
2 |
/** global: Materialize */
|
3 |
/** global: dataTable */
|
4 |
|
5 |
+
jQuery(document).ready(function () {
|
6 |
+
class Xcloner_Scheduler {
|
7 |
+
constructor() {
|
8 |
+
this.edit_modal = jQuery(".modal").modal();
|
9 |
+
}
|
10 |
+
|
11 |
+
get_form_params() {}
|
12 |
+
|
13 |
+
get_schedule_by_id(id) {
|
14 |
+
var $this = this;
|
15 |
+
|
16 |
+
if (id) {
|
17 |
+
jQuery.ajax({
|
18 |
+
url: ajaxurl,
|
19 |
+
data: { action: "get_schedule_by_id", id: id },
|
20 |
+
success: function (response) {
|
21 |
+
if (response.id == id) {
|
22 |
+
$this.create_modal(response);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
}
|
24 |
+
},
|
25 |
+
dataType: "json",
|
26 |
+
});
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
delete_schedule_by_id(id, elem, dataTable) {
|
31 |
+
var $this = this;
|
32 |
+
|
33 |
+
if (id) {
|
34 |
+
jQuery.ajax({
|
35 |
+
url: ajaxurl,
|
36 |
+
data: { action: "delete_schedule_by_id", id: id },
|
37 |
+
success: function (response) {
|
38 |
+
//window.location = "";
|
39 |
+
//console.log('schedule deleted');
|
40 |
+
//alert("Schedule deleted");
|
41 |
+
jQuery(elem).parents("tr").remove();
|
42 |
+
dataTable.row(jQuery(elem).parents("tr")).remove().draw();
|
43 |
+
},
|
44 |
+
dataType: "json",
|
45 |
+
});
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
create_modal(response) {
|
50 |
+
this.edit_modal.find("#schedule_id").text(response.id);
|
51 |
+
|
52 |
+
if (response.status == 1) {
|
53 |
+
this.edit_modal.find("#status").attr("checked", "checked");
|
54 |
+
} else {
|
55 |
+
this.edit_modal.find("#status").removeAttr("checked");
|
56 |
+
}
|
57 |
+
|
58 |
+
this.edit_modal.find("#schedule_id").text(response.id);
|
59 |
+
this.edit_modal.find("#schedule_id_hidden").val(response.id);
|
60 |
+
this.edit_modal.find("#schedule_name").val(response.name);
|
61 |
+
this.edit_modal
|
62 |
+
.find("#backup_name")
|
63 |
+
.val(response.backup_params.backup_name);
|
64 |
+
this.edit_modal
|
65 |
+
.find("#email_notification")
|
66 |
+
.val(response.backup_params.email_notification);
|
67 |
+
this.edit_modal
|
68 |
+
.find("#diff_start_date")
|
69 |
+
.val(response.backup_params.diff_start_date);
|
70 |
+
this.edit_modal
|
71 |
+
.find('#schedule_frequency>option[value="' + response.recurrence + '"]')
|
72 |
+
.prop("selected", true);
|
73 |
+
this.edit_modal
|
74 |
+
.find('#backup_type>option[value="' + response.backup_type + '"]')
|
75 |
+
.prop("selected", true);
|
76 |
+
this.edit_modal
|
77 |
+
.find(
|
78 |
+
'#schedule_storage>option[value="' + response.remote_storage + '"]'
|
79 |
+
)
|
80 |
+
.prop("selected", true);
|
81 |
+
//var date = new Date(response.start_at);
|
82 |
+
this.edit_modal.find("#schedule_start_date").val(response.start_at);
|
83 |
+
|
84 |
+
if (
|
85 |
+
response.backup_params.backup_encrypt !== undefined &&
|
86 |
+
response.backup_params.backup_encrypt == 1
|
87 |
+
) {
|
88 |
+
this.edit_modal.find("#backup_encrypt").attr("checked", "checked");
|
89 |
+
}
|
90 |
+
|
91 |
+
var tables = jQuery.parseJSON(response.table_params);
|
92 |
+
|
93 |
+
var tables_list = "";
|
94 |
+
|
95 |
+
for (var db in tables) {
|
96 |
+
for (var i in tables[db])
|
97 |
+
tables_list += db + "." + tables[db][i] + "\n";
|
98 |
+
}
|
99 |
+
|
100 |
+
this.edit_modal.find("#table_params").val(tables_list);
|
101 |
+
|
102 |
+
var files = jQuery.parseJSON(response.excluded_files);
|
103 |
+
var exclude_files_list = "";
|
104 |
+
for (var i in files) {
|
105 |
+
exclude_files_list += files[i] + "\n";
|
106 |
+
}
|
107 |
+
|
108 |
+
this.edit_modal.find("#excluded_files").val(exclude_files_list);
|
109 |
+
|
110 |
+
jQuery(".col select").material_select();
|
111 |
+
|
112 |
+
Materialize.updateTextFields();
|
113 |
+
|
114 |
+
this.edit_modal.modal("open");
|
115 |
+
}
|
116 |
+
|
117 |
+
save_schedule(form, dataTable) {
|
118 |
+
var data = jQuery(form).serialize();
|
119 |
+
var $this = this;
|
120 |
+
|
121 |
+
jQuery
|
122 |
+
.ajax({
|
123 |
+
url: ajaxurl,
|
124 |
+
dataType: "json",
|
125 |
+
type: "POST",
|
126 |
+
data: data,
|
127 |
+
error: function (err) {
|
128 |
+
//show_ajax_error("Communication Error", "", err)
|
129 |
+
//console.log(err);
|
130 |
+
alert("Error saving schedule!");
|
131 |
+
},
|
132 |
+
})
|
133 |
+
.done(function (json) {
|
134 |
+
if (json.error !== undefined) {
|
135 |
+
alert("Error saving schedule!" + json.error);
|
136 |
+
return;
|
137 |
+
}
|
138 |
+
|
139 |
+
$this.edit_modal.modal("close");
|
140 |
+
//location.reload();
|
141 |
+
dataTable.ajax.reload();
|
142 |
+
});
|
143 |
+
}
|
144 |
+
|
145 |
+
IsJsonString(str) {
|
146 |
+
try {
|
147 |
+
JSON.parse(str);
|
148 |
+
} catch (e) {
|
149 |
+
return false;
|
150 |
+
}
|
151 |
+
return true;
|
152 |
+
}
|
153 |
+
|
154 |
+
//end class
|
155 |
+
}
|
156 |
+
|
157 |
+
var xcloner_scheduler = new Xcloner_Scheduler();
|
158 |
+
|
159 |
+
jQuery("select[required]").css({
|
160 |
+
display: "block",
|
161 |
+
height: 0,
|
162 |
+
padding: 0,
|
163 |
+
width: 0,
|
164 |
+
position: "absolute",
|
165 |
+
});
|
166 |
+
|
167 |
+
dataTable = jQuery("#scheduled_backups").DataTable({
|
168 |
+
responsive: true,
|
169 |
+
bFilter: false,
|
170 |
+
order: [[3, "desc"]],
|
171 |
+
buttons: ["selectAll", "selectNone"],
|
172 |
+
language: {
|
173 |
+
emptyTable: "No schedules available",
|
174 |
+
buttons: {
|
175 |
+
selectAll: "Select all items",
|
176 |
+
selectNone: "Select none",
|
177 |
+
},
|
178 |
+
},
|
179 |
+
columnDefs: [
|
180 |
+
{ targets: "no-sort", orderable: false },
|
181 |
+
{ className: "hide-on-med-and-down", targets: [3, 5] },
|
182 |
+
],
|
183 |
+
ajax: ajaxurl + "?action=get_scheduler_list",
|
184 |
+
fnDrawCallback: function (oSettings) {
|
185 |
+
jQuery(this)
|
186 |
+
.off("click", ".edit")
|
187 |
+
.on("click", ".edit", function () {
|
188 |
+
var hash = jQuery(this).attr("href");
|
189 |
+
var id = hash.substr(1);
|
190 |
+
var data = xcloner_scheduler.get_schedule_by_id(id);
|
191 |
+
});
|
192 |
+
|
193 |
+
jQuery(this)
|
194 |
+
.off("click", ".delete")
|
195 |
+
.on("click", ".delete", function () {
|
196 |
+
var hash = jQuery(this).attr("href");
|
197 |
+
var id = hash.substr(1);
|
198 |
+
if (confirm("Are you sure you want to delete it?")) {
|
199 |
+
var data = xcloner_scheduler.delete_schedule_by_id(
|
200 |
+
id,
|
201 |
+
this,
|
202 |
+
dataTable
|
203 |
+
);
|
204 |
+
}
|
205 |
+
});
|
206 |
+
|
207 |
+
jQuery("span.shorten_string").each(function () {
|
208 |
+
doShortText(jQuery(this));
|
209 |
+
});
|
210 |
+
jQuery("span.shorten_string").click(function () {
|
211 |
+
jQuery(this).toggleClass("full");
|
212 |
+
doShortText(jQuery(this));
|
213 |
+
});
|
214 |
+
},
|
215 |
+
});
|
216 |
+
|
217 |
+
jQuery("#save_schedule").on("submit", function () {
|
218 |
+
xcloner_scheduler.save_schedule(jQuery(this), dataTable);
|
219 |
+
|
220 |
+
return false;
|
221 |
+
});
|
222 |
+
|
223 |
+
var date_picker;
|
224 |
+
var date_picker_allowed;
|
225 |
+
|
226 |
+
if (typeof jQuery(".timepicker").pickatime === "function") {
|
227 |
+
jQuery(".timepicker").pickatime({
|
228 |
+
default: "now",
|
229 |
+
min: [7, 30],
|
230 |
+
twelvehour: false, // change to 12 hour AM/PM clock from 24 hour
|
231 |
+
donetext: "OK",
|
232 |
+
autoclose: false,
|
233 |
+
vibrate: true, // vibrate the device when dragging clock hand
|
234 |
+
});
|
235 |
+
}
|
236 |
+
|
237 |
+
if (typeof jQuery(".timepicker").pickatime === "function") {
|
238 |
+
date_picker = jQuery(".datepicker").pickadate({
|
239 |
+
format: "d mmmm yyyy",
|
240 |
+
selectMonths: true, // Creates a dropdown to control month
|
241 |
+
selectYears: 15, // Creates a dropdown of 15 years to control year
|
242 |
+
min: +0.1,
|
243 |
+
onSet: function () {
|
244 |
+
//this.close();
|
245 |
+
},
|
246 |
+
});
|
247 |
+
|
248 |
+
date_picker_allowed = jQuery(".datepicker_max_today").pickadate({
|
249 |
+
format: "yyyy-mm-dd",
|
250 |
+
selectMonths: true, // Creates a dropdown to control month
|
251 |
+
selectYears: 15, // Creates a dropdown of 15 years to control year
|
252 |
+
max: +0.1,
|
253 |
+
onSet: function () {
|
254 |
+
//this.close();
|
255 |
+
},
|
256 |
+
});
|
257 |
+
}
|
258 |
});
|
docs/index.html
ADDED
File without changes
|
includes/class-xcloner-remote-storage.php
CHANGED
@@ -269,7 +269,7 @@ class Xcloner_Remote_Storage
|
|
269 |
|
270 |
|
271 |
//we do not save empty encrypted credentials
|
272 |
-
if ($validation == "raw" && str_repeat('*', strlen($_POST[$check_field])) == $_POST[$check_field]) {
|
273 |
continue;
|
274 |
}
|
275 |
|
@@ -825,7 +825,7 @@ class Xcloner_Remote_Storage
|
|
825 |
'port' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_port", 22),
|
826 |
'root' => ($this->xcloner_settings->get_xcloner_option("xcloner_sftp_path")?$this->xcloner_settings->get_xcloner_option("xcloner_sftp_path"):'./'),
|
827 |
'privateKey' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_private_key"),
|
828 |
-
'timeout' => $this->xcloner_settings->get_xcloner_option("
|
829 |
]);
|
830 |
|
831 |
$adapter->connect();
|
269 |
|
270 |
|
271 |
//we do not save empty encrypted credentials
|
272 |
+
if ($validation == "raw" && str_repeat('*', strlen($_POST[$check_field])) == $_POST[$check_field] && $_POST[$check_field]) {
|
273 |
continue;
|
274 |
}
|
275 |
|
825 |
'port' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_port", 22),
|
826 |
'root' => ($this->xcloner_settings->get_xcloner_option("xcloner_sftp_path")?$this->xcloner_settings->get_xcloner_option("xcloner_sftp_path"):'./'),
|
827 |
'privateKey' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_private_key"),
|
828 |
+
'timeout' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_timeout", 30),
|
829 |
]);
|
830 |
|
831 |
$adapter->connect();
|
vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/CHANGELOG.md
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/CONDUCT.md
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/CONTRIBUTING.md
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/LICENSE
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/README.md
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/composer.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/phpunit.xml
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Bucket.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Client.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/ErrorHandler.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/B2Exception.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/BadJsonException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/BadValueException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/BucketAlreadyExistsException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/BucketNotEmptyException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/FileNotPresentException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/NotFoundException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Exceptions/ValidationException.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/File.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/src/Http/Client.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/ClientTest.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/TestHelper.php
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/authorize_account.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/bucket_not_empty.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/create_bucket_exists.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/create_bucket_private.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/create_bucket_public.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/delete_bucket.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/delete_bucket_non_existent.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/delete_file.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/delete_file_non_existent.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_id.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_path.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/download_content
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/get_file.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/get_file_non_existent.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/get_upload_url.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/list_buckets_0.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/list_buckets_3.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/list_files_empty.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/list_files_page1.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/list_files_page2.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_private.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_public.json
CHANGED
File without changes
|
vendor/gliterd/backblaze-b2/tests/responses/upload.json
CHANGED
File without changes
|
vendor/guzzlehttp/guzzle/.editorconfig
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# EditorConfig is awesome: http://EditorConfig.org
|
2 |
+
|
3 |
+
# top-most EditorConfig file
|
4 |
+
root = true
|
5 |
+
|
6 |
+
# Unix-style newlines with a newline ending for every file
|
7 |
+
# Indent with 4 spaces
|
8 |
+
[php]
|
9 |
+
end_of_line = lf
|
10 |
+
indent_style = space
|
11 |
+
indent_size = 4
|
vendor/guzzlehttp/guzzle/.gitattributes
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.editorconfig export-ignore
|
2 |
+
.gitattributes export-ignore
|
3 |
+
/.github/ export-ignore
|
4 |
+
.gitignore export-ignore
|
5 |
+
/.travis.yml export-ignore
|
6 |
+
/build/ export-ignore
|
7 |
+
/docs/ export-ignore
|
8 |
+
/Makefile export-ignore
|
9 |
+
/phpstan-baseline.neon export-ignore
|
10 |
+
/phpstan.neon.dist export-ignore
|
11 |
+
/phpunit.xml.dist export-ignore
|
12 |
+
/tests/ export-ignore
|
vendor/guzzlehttp/guzzle/.gitignore
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
phpunit.xml
|
2 |
+
composer.phar
|
3 |
+
composer.lock
|
4 |
+
composer-test.lock
|
5 |
+
vendor/
|
6 |
+
build/artifacts/
|
7 |
+
artifacts/
|
8 |
+
docs/_build
|
9 |
+
docs/*.pyc
|
10 |
+
.idea
|
11 |
+
.DS_STORE
|
vendor/guzzlehttp/guzzle/.travis.yml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: php
|
2 |
+
|
3 |
+
sudo: false
|
4 |
+
|
5 |
+
php:
|
6 |
+
- 5.6
|
7 |
+
- 7.0
|
8 |
+
- 7.1
|
9 |
+
- 7.2
|
10 |
+
- 7.3
|
11 |
+
- 7.4snapshot
|
12 |
+
- nightly
|
13 |
+
|
14 |
+
before_script:
|
15 |
+
- curl --version
|
16 |
+
- composer install --no-interaction --prefer-source --dev
|
17 |
+
- ~/.nvm/nvm.sh install v0.6.14
|
18 |
+
- ~/.nvm/nvm.sh run v0.6.14
|
19 |
+
- if [[ "$TRAVIS_PHP_VERSION" != "7.0" || "$TRAVIS_PHP_VERSION" != "7.1" ]]; then echo "xdebug.overload_var_dump = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini || true; fi
|
20 |
+
|
21 |
+
script: make test
|
22 |
+
|
23 |
+
matrix:
|
24 |
+
allow_failures:
|
25 |
+
- php: hhvm
|
26 |
+
dist: trusty
|
27 |
+
- php: nightly
|
28 |
+
include:
|
29 |
+
- php: 5.5
|
30 |
+
dist: trusty
|
31 |
+
- php: hhvm
|
32 |
+
dist: trusty
|
33 |
+
fast_finish: true
|
34 |
+
|
35 |
+
before_deploy:
|
36 |
+
- make package
|
37 |
+
|
38 |
+
deploy:
|
39 |
+
provider: releases
|
40 |
+
skip_cleanup: true
|
41 |
+
api_key:
|
42 |
+
secure: mz9H1B4cPH7dW9hTzgHnbh75+HJ6fJZ9S/1nMWFaqgj5C0wDzTqkJ+BbwiCEiqXGh6VGZbM4EmO1/wnZ7B+Hk8zsB1PP+GKVkq8+7a/261o60W3OS4gQpZQ9R68dyEO1EyZBJvL1Lzc03rkt/0WnKiAjg7nsc1j4aLKhWMDQ6x8=
|
43 |
+
file:
|
44 |
+
- build/artifacts/guzzle.phar
|
45 |
+
- build/artifacts/guzzle.zip
|
46 |
+
on:
|
47 |
+
repo: guzzle/guzzle
|
48 |
+
tags: true
|
49 |
+
all_branches: true
|
50 |
+
php: 5.5
|
vendor/guzzlehttp/guzzle/Makefile
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
help:
|
2 |
+
@echo "Please use \`make <target>' where <target> is one of"
|
3 |
+
@echo " start-server to start the test server"
|
4 |
+
@echo " stop-server to stop the test server"
|
5 |
+
@echo " test to perform unit tests. Provide TEST to perform a specific test."
|
6 |
+
@echo " coverage to perform unit tests with code coverage. Provide TEST to perform a specific test."
|
7 |
+
@echo " coverage-show to show the code coverage report"
|
8 |
+
@echo " clean to remove build artifacts"
|
9 |
+
@echo " docs to build the Sphinx docs"
|
10 |
+
@echo " docs-show to view the Sphinx docs"
|
11 |
+
@echo " tag to modify the version, update changelog, and chag tag"
|
12 |
+
@echo " package to build the phar and zip files"
|
13 |
+
|
14 |
+
start-server: stop-server
|
15 |
+
node tests/server.js &> /dev/null &
|
16 |
+
|
17 |
+
stop-server:
|
18 |
+
@PID=$(shell ps axo pid,command \
|
19 |
+
| grep 'tests/server.js' \
|
20 |
+
| grep -v grep \
|
21 |
+
| cut -f 1 -d " "\
|
22 |
+
) && [ -n "$$PID" ] && kill $$PID || true
|
23 |
+
|
24 |
+
test: start-server
|
25 |
+
vendor/bin/phpunit
|
26 |
+
$(MAKE) stop-server
|
27 |
+
|
28 |
+
coverage: start-server
|
29 |
+
vendor/bin/phpunit --coverage-html=build/artifacts/coverage
|
30 |
+
$(MAKE) stop-server
|
31 |
+
|
32 |
+
coverage-show: view-coverage
|
33 |
+
|
34 |
+
view-coverage:
|
35 |
+
open build/artifacts/coverage/index.html
|
36 |
+
|
37 |
+
clean:
|
38 |
+
rm -rf artifacts/*
|
39 |
+
|
40 |
+
docs:
|
41 |
+
cd docs && make html && cd ..
|
42 |
+
|
43 |
+
docs-show:
|
44 |
+
open docs/_build/html/index.html
|
45 |
+
|
46 |
+
tag:
|
47 |
+
$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
|
48 |
+
@echo Tagging $(TAG)
|
49 |
+
chag update $(TAG)
|
50 |
+
sed -i '' -e "s/VERSION = '.*'/VERSION = '$(TAG)'/" src/ClientInterface.php
|
51 |
+
php -l src/ClientInterface.php
|
52 |
+
git add -A
|
53 |
+
git commit -m '$(TAG) release'
|
54 |
+
chag tag
|
55 |
+
|
56 |
+
package:
|
57 |
+
php build/packager.php
|
58 |
+
|
59 |
+
.PHONY: docs burgomaster coverage-show view-coverage
|
vendor/guzzlehttp/guzzle/build/Burgomaster.php
ADDED
@@ -0,0 +1,385 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Packages the zip and phar file using a staging directory.
|
5 |
+
*
|
6 |
+
* @license MIT, Michael Dowling https://github.com/mtdowling
|
7 |
+
* @license https://github.com/mtdowling/Burgomaster/LICENSE
|
8 |
+
*/
|
9 |
+
class Burgomaster
|
10 |
+
{
|
11 |
+
/** @var string Base staging directory of the project */
|
12 |
+
public $stageDir;
|
13 |
+
|
14 |
+
/** @var string Root directory of the project */
|
15 |
+
public $projectRoot;
|
16 |
+
|
17 |
+
/** @var array stack of sections */
|
18 |
+
private $sections = array();
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @param string $stageDir Staging base directory where your packaging
|
22 |
+
* takes place. This folder will be created for
|
23 |
+
* you if it does not exist. If it exists, it
|
24 |
+
* will be deleted and recreated to start fresh.
|
25 |
+
* @param string $projectRoot Root directory of the project.
|
26 |
+
*
|
27 |
+
* @throws \InvalidArgumentException
|
28 |
+
* @throws \RuntimeException
|
29 |
+
*/
|
30 |
+
public function __construct($stageDir, $projectRoot = null)
|
31 |
+
{
|
32 |
+
$this->startSection('setting_up');
|
33 |
+
$this->stageDir = $stageDir;
|
34 |
+
$this->projectRoot = $projectRoot;
|
35 |
+
|
36 |
+
if (!$this->stageDir || $this->stageDir == '/') {
|
37 |
+
throw new \InvalidArgumentException('Invalid base directory');
|
38 |
+
}
|
39 |
+
|
40 |
+
if (is_dir($this->stageDir)) {
|
41 |
+
$this->debug("Removing existing directory: $this->stageDir");
|
42 |
+
echo $this->exec("rm -rf $this->stageDir");
|
43 |
+
}
|
44 |
+
|
45 |
+
$this->debug("Creating staging directory: $this->stageDir");
|
46 |
+
|
47 |
+
if (!mkdir($this->stageDir, 0777, true)) {
|
48 |
+
throw new \RuntimeException("Could not create {$this->stageDir}");
|
49 |
+
}
|
50 |
+
|
51 |
+
$this->stageDir = realpath($this->stageDir);
|
52 |
+
$this->debug("Creating staging directory at: {$this->stageDir}");
|
53 |
+
|
54 |
+
if (!is_dir($this->projectRoot)) {
|
55 |
+
throw new \InvalidArgumentException(
|
56 |
+
"Project root not found: $this->projectRoot"
|
57 |
+
);
|
58 |
+
}
|
59 |
+
|
60 |
+
$this->endSection();
|
61 |
+
$this->startSection('staging');
|
62 |
+
|
63 |
+
chdir($this->projectRoot);
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Cleanup if the last section was not already closed.
|
68 |
+
*/
|
69 |
+
public function __destruct()
|
70 |
+
{
|
71 |
+
if ($this->sections) {
|
72 |
+
$this->endSection();
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Call this method when starting a specific section of the packager.
|
78 |
+
*
|
79 |
+
* This makes the debug messages used in your script more meaningful and
|
80 |
+
* adds context when things go wrong. Be sure to call endSection() when
|
81 |
+
* you have finished a section of your packaging script.
|
82 |
+
*
|
83 |
+
* @param string $section Part of the packager that is running
|
84 |
+
*/
|
85 |
+
public function startSection($section)
|
86 |
+
{
|
87 |
+
$this->sections[] = $section;
|
88 |
+
$this->debug('Starting');
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Call this method when leaving the last pushed section of the packager.
|
93 |
+
*/
|
94 |
+
public function endSection()
|
95 |
+
{
|
96 |
+
if ($this->sections) {
|
97 |
+
$this->debug('Completed');
|
98 |
+
array_pop($this->sections);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Prints a debug message to STDERR bound to the current section.
|
104 |
+
*
|
105 |
+
* @param string $message Message to echo to STDERR
|
106 |
+
*/
|
107 |
+
public function debug($message)
|
108 |
+
{
|
109 |
+
$prefix = date('c') . ': ';
|
110 |
+
|
111 |
+
if ($this->sections) {
|
112 |
+
$prefix .= '[' . end($this->sections) . '] ';
|
113 |
+
}
|
114 |
+
|
115 |
+
fwrite(STDERR, $prefix . $message . "\n");
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Copies a file and creates the destination directory if needed.
|
120 |
+
*
|
121 |
+
* @param string $from File to copy
|
122 |
+
* @param string $to Destination to copy the file to, relative to the
|
123 |
+
* base staging directory.
|
124 |
+
* @throws \InvalidArgumentException if the file cannot be found
|
125 |
+
* @throws \RuntimeException if the directory cannot be created.
|
126 |
+
* @throws \RuntimeException if the file cannot be copied.
|
127 |
+
*/
|
128 |
+
public function deepCopy($from, $to)
|
129 |
+
{
|
130 |
+
if (!is_file($from)) {
|
131 |
+
throw new \InvalidArgumentException("File not found: {$from}");
|
132 |
+
}
|
133 |
+
|
134 |
+
$to = str_replace('//', '/', $this->stageDir . '/' . $to);
|
135 |
+
$dir = dirname($to);
|
136 |
+
|
137 |
+
if (!is_dir($dir)) {
|
138 |
+
if (!mkdir($dir, 0777, true)) {
|
139 |
+
throw new \RuntimeException("Unable to create directory: $dir");
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
if (!copy($from, $to)) {
|
144 |
+
throw new \RuntimeException("Unable to copy $from to $to");
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Recursively copy one folder to another.
|
150 |
+
*
|
151 |
+
* Any LICENSE file is automatically copied.
|
152 |
+
*
|
153 |
+
* @param string $sourceDir Source directory to copy from
|
154 |
+
* @param string $destDir Directory to copy the files to that is relative
|
155 |
+
* to the the stage base directory.
|
156 |
+
* @param array $extensions File extensions to copy from the $sourceDir.
|
157 |
+
* Defaults to "php" files only (e.g., ['php']).
|
158 |
+
* @throws \InvalidArgumentException if the source directory is invalid.
|
159 |
+
*/
|
160 |
+
public function recursiveCopy(
|
161 |
+
$sourceDir,
|
162 |
+
$destDir,
|
163 |
+
$extensions = array('php')
|
164 |
+
) {
|
165 |
+
if (!realpath($sourceDir)) {
|
166 |
+
throw new \InvalidArgumentException("$sourceDir not found");
|
167 |
+
}
|
168 |
+
|
169 |
+
if (!$extensions) {
|
170 |
+
throw new \InvalidArgumentException('$extensions is empty!');
|
171 |
+
}
|
172 |
+
|
173 |
+
$sourceDir = realpath($sourceDir);
|
174 |
+
$exts = array_fill_keys($extensions, true);
|
175 |
+
$iter = new \RecursiveDirectoryIterator($sourceDir);
|
176 |
+
$iter = new \RecursiveIteratorIterator($iter);
|
177 |
+
$total = 0;
|
178 |
+
|
179 |
+
$this->startSection('copy');
|
180 |
+
$this->debug("Starting to copy files from $sourceDir");
|
181 |
+
|
182 |
+
foreach ($iter as $file) {
|
183 |
+
if (isset($exts[$file->getExtension()])
|
184 |
+
|| $file->getBaseName() == 'LICENSE'
|
185 |
+
) {
|
186 |
+
// Remove the source directory from the destination path
|
187 |
+
$toPath = str_replace($sourceDir, '', (string) $file);
|
188 |
+
$toPath = $destDir . '/' . $toPath;
|
189 |
+
$toPath = str_replace('//', '/', $toPath);
|
190 |
+
$this->deepCopy((string) $file, $toPath);
|
191 |
+
$total++;
|
192 |
+
}
|
193 |
+
}
|
194 |
+
|
195 |
+
$this->debug("Copied $total files from $sourceDir");
|
196 |
+
$this->endSection();
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Execute a command and throw an exception if the return code is not 0.
|
201 |
+
*
|
202 |
+
* @param string $command Command to execute
|
203 |
+
*
|
204 |
+
* @return string Returns the output of the command as a string
|
205 |
+
* @throws \RuntimeException on error.
|
206 |
+
*/
|
207 |
+
public function exec($command)
|
208 |
+
{
|
209 |
+
$this->debug("Executing: $command");
|
210 |
+
$output = $returnValue = null;
|
211 |
+
exec($command, $output, $returnValue);
|
212 |
+
|
213 |
+
if ($returnValue != 0) {
|
214 |
+
throw new \RuntimeException('Error executing command: '
|
215 |
+
. $command . ' : ' . implode("\n", $output));
|
216 |
+
}
|
217 |
+
|
218 |
+
return implode("\n", $output);
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Creates a class-map autoloader to the staging directory in a file
|
223 |
+
* named autoloader.php
|
224 |
+
*
|
225 |
+
* @param array $files Files to explicitly require in the autoloader. This
|
226 |
+
* is similar to Composer's "files" "autoload" section.
|
227 |
+
* @param string $filename Name of the autoloader file.
|
228 |
+
* @throws \RuntimeException if the file cannot be written
|
229 |
+
*/
|
230 |
+
public function createAutoloader($files = array(), $filename = 'autoloader.php')
|
231 |
+
{
|
232 |
+
$sourceDir = realpath($this->stageDir);
|
233 |
+
$iter = new \RecursiveDirectoryIterator($sourceDir);
|
234 |
+
$iter = new \RecursiveIteratorIterator($iter);
|
235 |
+
|
236 |
+
$this->startSection('autoloader');
|
237 |
+
$this->debug('Creating classmap autoloader');
|
238 |
+
$this->debug("Collecting valid PHP files from {$this->stageDir}");
|
239 |
+
|
240 |
+
$classMap = array();
|
241 |
+
foreach ($iter as $file) {
|
242 |
+
if ($file->getExtension() == 'php') {
|
243 |
+
$location = str_replace($this->stageDir . '/', '', (string) $file);
|
244 |
+
$className = str_replace('/', '\\', $location);
|
245 |
+
$className = substr($className, 0, -4);
|
246 |
+
|
247 |
+
// Remove "src\" or "lib\"
|
248 |
+
if (strpos($className, 'src\\') === 0
|
249 |
+
|| strpos($className, 'lib\\') === 0
|
250 |
+
) {
|
251 |
+
$className = substr($className, 4);
|
252 |
+
}
|
253 |
+
|
254 |
+
$classMap[$className] = "__DIR__ . '/$location'";
|
255 |
+
$this->debug("Found $className");
|
256 |
+
}
|
257 |
+
}
|
258 |
+
|
259 |
+
$destFile = $this->stageDir . '/' . $filename;
|
260 |
+
$this->debug("Writing autoloader to {$destFile}");
|
261 |
+
|
262 |
+
if (!($h = fopen($destFile, 'w'))) {
|
263 |
+
throw new \RuntimeException('Unable to open file for writing');
|
264 |
+
}
|
265 |
+
|
266 |
+
$this->debug('Writing classmap files');
|
267 |
+
fwrite($h, "<?php\n\n");
|
268 |
+
fwrite($h, "\$mapping = array(\n");
|
269 |
+
foreach ($classMap as $c => $f) {
|
270 |
+
fwrite($h, " '$c' => $f,\n");
|
271 |
+
}
|
272 |
+
fwrite($h, ");\n\n");
|
273 |
+
fwrite($h, <<<EOT
|
274 |
+
spl_autoload_register(function (\$class) use (\$mapping) {
|
275 |
+
if (isset(\$mapping[\$class])) {
|
276 |
+
require \$mapping[\$class];
|
277 |
+
}
|
278 |
+
}, true);
|
279 |
+
|
280 |
+
EOT
|
281 |
+
);
|
282 |
+
|
283 |
+
fwrite($h, "\n");
|
284 |
+
|
285 |
+
$this->debug('Writing automatically included files');
|
286 |
+
foreach ($files as $file) {
|
287 |
+
fwrite($h, "require __DIR__ . '/$file';\n");
|
288 |
+
}
|
289 |
+
|
290 |
+
fclose($h);
|
291 |
+
|
292 |
+
$this->endSection();
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Creates a default stub for the phar that includeds the generated
|
297 |
+
* autoloader.
|
298 |
+
*
|
299 |
+
* This phar also registers a constant that can be used to check if you
|
300 |
+
* are running the phar. The constant is the basename of the $dest variable
|
301 |
+
* without the extension, with "_PHAR" appended, then converted to all
|
302 |
+
* caps (e.g., "/foo/guzzle.phar" gets a contant defined as GUZZLE_PHAR.
|
303 |
+
*
|
304 |
+
* @param $dest
|
305 |
+
* @param string $autoloaderFilename Name of the autoloader file.
|
306 |
+
*
|
307 |
+
* @return string
|
308 |
+
*/
|
309 |
+
private function createStub($dest, $autoloaderFilename = 'autoloader.php')
|
310 |
+
{
|
311 |
+
$this->startSection('stub');
|
312 |
+
$this->debug("Creating phar stub at $dest");
|
313 |
+
|
314 |
+
$alias = basename($dest);
|
315 |
+
$constName = str_replace('.phar', '', strtoupper($alias)) . '_PHAR';
|
316 |
+
$stub = "<?php\n";
|
317 |
+
$stub .= "define('$constName', true);\n";
|
318 |
+
$stub .= "require 'phar://$alias/{$autoloaderFilename}';\n";
|
319 |
+
$stub .= "__HALT_COMPILER();\n";
|
320 |
+
$this->endSection();
|
321 |
+
|
322 |
+
return $stub;
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Creates a phar that automatically registers an autoloader.
|
327 |
+
*
|
328 |
+
* Call this only after your staging directory is built.
|
329 |
+
*
|
330 |
+
* @param string $dest Where to save the file. The basename of the file
|
331 |
+
* is also used as the alias name in the phar
|
332 |
+
* (e.g., /path/to/guzzle.phar => guzzle.phar).
|
333 |
+
* @param string|bool|null $stub The path to the phar stub file. Pass or
|
334 |
+
* leave null to automatically have one created for you. Pass false
|
335 |
+
* to no use a stub in the generated phar.
|
336 |
+
* @param string $autoloaderFilename Name of the autolaoder filename.
|
337 |
+
*/
|
338 |
+
public function createPhar(
|
339 |
+
$dest,
|
340 |
+
$stub = null,
|
341 |
+
$autoloaderFilename = 'autoloader.php'
|
342 |
+
) {
|
343 |
+
$this->startSection('phar');
|
344 |
+
$this->debug("Creating phar file at $dest");
|
345 |
+
$this->createDirIfNeeded(dirname($dest));
|
346 |
+
$phar = new \Phar($dest, 0, basename($dest));
|
347 |
+
$phar->buildFromDirectory($this->stageDir);
|
348 |
+
|
349 |
+
if ($stub !== false) {
|
350 |
+
if (!$stub) {
|
351 |
+
$stub = $this->createStub($dest, $autoloaderFilename);
|
352 |
+
}
|
353 |
+
$phar->setStub($stub);
|
354 |
+
}
|
355 |
+
|
356 |
+
$this->debug("Created phar at $dest");
|
357 |
+
$this->endSection();
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Creates a zip file containing the staged files of your project.
|
362 |
+
*
|
363 |
+
* Call this only after your staging directory is built.
|
364 |
+
*
|
365 |
+
* @param string $dest Where to save the zip file
|
366 |
+
*/
|
367 |
+
public function createZip($dest)
|
368 |
+
{
|
369 |
+
$this->startSection('zip');
|
370 |
+
$this->debug("Creating a zip file at $dest");
|
371 |
+
$this->createDirIfNeeded(dirname($dest));
|
372 |
+
chdir($this->stageDir);
|
373 |
+
$this->exec("zip -r $dest ./");
|
374 |
+
$this->debug(" > Created at $dest");
|
375 |
+
chdir(__DIR__);
|
376 |
+
$this->endSection();
|
377 |
+
}
|
378 |
+
|
379 |
+
private function createDirIfNeeded($dir)
|
380 |
+
{
|
381 |
+
if (!is_dir($dir) && !mkdir($dir, 0755, true)) {
|
382 |
+
throw new \RuntimeException("Could not create dir: $dir");
|
383 |
+
}
|
384 |
+
}
|
385 |
+
}
|
vendor/guzzlehttp/guzzle/build/packager.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require __DIR__ . '/Burgomaster.php';
|
3 |
+
|
4 |
+
$stageDirectory = __DIR__ . '/artifacts/staging';
|
5 |
+
$projectRoot = __DIR__ . '/../';
|
6 |
+
$packager = new \Burgomaster($stageDirectory, $projectRoot);
|
7 |
+
|
8 |
+
// Copy basic files to the stage directory. Note that we have chdir'd onto
|
9 |
+
// the $projectRoot directory, so use relative paths.
|
10 |
+
foreach (['README.md', 'LICENSE'] as $file) {
|
11 |
+
$packager->deepCopy($file, $file);
|
12 |
+
}
|
13 |
+
|
14 |
+
// Copy each dependency to the staging directory. Copy *.php and *.pem files.
|
15 |
+
$packager->recursiveCopy('src', 'GuzzleHttp', ['php']);
|
16 |
+
$packager->recursiveCopy('vendor/guzzlehttp/promises/src', 'GuzzleHttp/Promise');
|
17 |
+
$packager->recursiveCopy('vendor/guzzlehttp/psr7/src', 'GuzzleHttp/Psr7');
|
18 |
+
$packager->recursiveCopy('vendor/psr/http-message/src', 'Psr/Http/Message');
|
19 |
+
|
20 |
+
$packager->createAutoloader([
|
21 |
+
'GuzzleHttp/functions_include.php',
|
22 |
+
'GuzzleHttp/Psr7/functions_include.php',
|
23 |
+
'GuzzleHttp/Promise/functions_include.php',
|
24 |
+
]);
|
25 |
+
|
26 |
+
$packager->createPhar(__DIR__ . '/artifacts/guzzle.phar');
|
27 |
+
$packager->createZip(__DIR__ . '/artifacts/guzzle.zip');
|
vendor/guzzlehttp/guzzle/docs/Makefile
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Makefile for Sphinx documentation
|
2 |
+
#
|
3 |
+
|
4 |
+
# You can set these variables from the command line.
|
5 |
+
SPHINXOPTS =
|
6 |
+
SPHINXBUILD = sphinx-build
|
7 |
+
PAPER =
|
8 |
+
BUILDDIR = _build
|
9 |
+
|
10 |
+
# Internal variables.
|
11 |
+
PAPEROPT_a4 = -D latex_paper_size=a4
|
12 |
+
PAPEROPT_letter = -D latex_paper_size=letter
|
13 |
+
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
14 |
+
# the i18n builder cannot share the environment and doctrees with the others
|
15 |
+
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
16 |
+
|
17 |
+
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
18 |
+
|
19 |
+
help:
|
20 |
+
@echo "Please use \`make <target>' where <target> is one of"
|
21 |
+
@echo " html to make standalone HTML files"
|
22 |
+
@echo " dirhtml to make HTML files named index.html in directories"
|
23 |
+
@echo " singlehtml to make a single large HTML file"
|
24 |
+
@echo " pickle to make pickle files"
|
25 |
+
@echo " json to make JSON files"
|
26 |
+
@echo " htmlhelp to make HTML files and a HTML help project"
|
27 |
+
@echo " qthelp to make HTML files and a qthelp project"
|
28 |
+
@echo " devhelp to make HTML files and a Devhelp project"
|
29 |
+
@echo " epub to make an epub"
|
30 |
+
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
31 |
+
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
32 |
+
@echo " text to make text files"
|
33 |
+
@echo " man to make manual pages"
|
34 |
+
@echo " texinfo to make Texinfo files"
|
35 |
+
@echo " info to make Texinfo files and run them through makeinfo"
|
36 |
+
@echo " gettext to make PO message catalogs"
|
37 |
+
@echo " changes to make an overview of all changed/added/deprecated items"
|
38 |
+
@echo " linkcheck to check all external links for integrity"
|
39 |
+
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
40 |
+
|
41 |
+
clean:
|
42 |
+
-rm -rf $(BUILDDIR)/*
|
43 |
+
|
44 |
+
html:
|
45 |
+
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
46 |
+
@echo
|
47 |
+
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
48 |
+
|
49 |
+
dirhtml:
|
50 |
+
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
51 |
+
@echo
|
52 |
+
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
53 |
+
|
54 |
+
singlehtml:
|
55 |
+
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
56 |
+
@echo
|
57 |
+
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
58 |
+
|
59 |
+
pickle:
|
60 |
+
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
61 |
+
@echo
|
62 |
+
@echo "Build finished; now you can process the pickle files."
|
63 |
+
|
64 |
+
json:
|
65 |
+
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
66 |
+
@echo
|
67 |
+
@echo "Build finished; now you can process the JSON files."
|
68 |
+
|
69 |
+
htmlhelp:
|
70 |
+
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
71 |
+
@echo
|
72 |
+
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
73 |
+
".hhp project file in $(BUILDDIR)/htmlhelp."
|
74 |
+
|
75 |
+
qthelp:
|
76 |
+
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
77 |
+
@echo
|
78 |
+
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
79 |
+
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
80 |
+
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Guzzle.qhcp"
|
81 |
+
@echo "To view the help file:"
|
82 |
+
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Guzzle.qhc"
|
83 |
+
|
84 |
+
devhelp:
|
85 |
+
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
86 |
+
@echo
|
87 |
+
@echo "Build finished."
|
88 |
+
@echo "To view the help file:"
|
89 |
+
@echo "# mkdir -p $$HOME/.local/share/devhelp/Guzzle"
|
90 |
+
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Guzzle"
|
91 |
+
@echo "# devhelp"
|
92 |
+
|
93 |
+
epub:
|
94 |
+
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
95 |
+
@echo
|
96 |
+
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
97 |
+
|
98 |
+
latex:
|
99 |
+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
100 |
+
@echo
|
101 |
+
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
102 |
+
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
103 |
+
"(use \`make latexpdf' here to do that automatically)."
|
104 |
+
|
105 |
+
latexpdf:
|
106 |
+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
107 |
+
@echo "Running LaTeX files through pdflatex..."
|
108 |
+
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
109 |
+
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
110 |
+
|
111 |
+
text:
|
112 |
+
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
113 |
+
@echo
|
114 |
+
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
115 |
+
|
116 |
+
man:
|
117 |
+
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
118 |
+
@echo
|
119 |
+
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
120 |
+
|
121 |
+
texinfo:
|
122 |
+
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
123 |
+
@echo
|
124 |
+
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
125 |
+
@echo "Run \`make' in that directory to run these through makeinfo" \
|
126 |
+
"(use \`make info' here to do that automatically)."
|
127 |
+
|
128 |
+
info:
|
129 |
+
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
130 |
+
@echo "Running Texinfo files through makeinfo..."
|
131 |
+
make -C $(BUILDDIR)/texinfo info
|
132 |
+
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
133 |
+
|
134 |
+
gettext:
|
135 |
+
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
136 |
+
@echo
|
137 |
+
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
138 |
+
|
139 |
+
changes:
|
140 |
+
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
141 |
+
@echo
|
142 |
+
@echo "The overview file is in $(BUILDDIR)/changes."
|
143 |
+
|
144 |
+
linkcheck:
|
145 |
+
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
146 |
+
@echo
|
147 |
+
@echo "Link check complete; look for any errors in the above output " \
|
148 |
+
"or in $(BUILDDIR)/linkcheck/output.txt."
|
149 |
+
|
150 |
+
doctest:
|
151 |
+
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
152 |
+
@echo "Testing of doctests in the sources finished, look at the " \
|
153 |
+
"results in $(BUILDDIR)/doctest/output.txt."
|
vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png
ADDED
Binary file
|
vendor/guzzlehttp/guzzle/docs/_static/logo.png
ADDED
Binary file
|
vendor/guzzlehttp/guzzle/docs/conf.py
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import sys, os
|
2 |
+
from sphinx.highlighting import lexers
|
3 |
+
from pygments.lexers.web import PhpLexer
|
4 |
+
|
5 |
+
|
6 |
+
lexers['php'] = PhpLexer(startinline=True, linenos=1)
|
7 |
+
lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
|
8 |
+
primary_domain = 'php'
|
9 |
+
|
10 |
+
extensions = []
|
11 |
+
templates_path = ['_templates']
|
12 |
+
source_suffix = '.rst'
|
13 |
+
master_doc = 'index'
|
14 |
+
project = u'Guzzle'
|
15 |
+
copyright = u'2015, Michael Dowling'
|
16 |
+
version = '6'
|
17 |
+
html_title = "Guzzle Documentation"
|
18 |
+
html_short_title = "Guzzle 6"
|
19 |
+
|
20 |
+
exclude_patterns = ['_build']
|
21 |
+
html_static_path = ['_static']
|
22 |
+
|
23 |
+
##### Guzzle sphinx theme
|
24 |
+
|
25 |
+
import guzzle_sphinx_theme
|
26 |
+
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
|
27 |
+
html_theme_path = guzzle_sphinx_theme.html_theme_path()
|
28 |
+
html_theme = 'guzzle_sphinx_theme'
|
29 |
+
|
30 |
+
# Custom sidebar templates, maps document names to template names.
|
31 |
+
html_sidebars = {
|
32 |
+
'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']
|
33 |
+
}
|
34 |
+
|
35 |
+
# Register the theme as an extension to generate a sitemap.xml
|
36 |
+
extensions.append("guzzle_sphinx_theme")
|
37 |
+
|
38 |
+
# Guzzle theme options (see theme.conf for more information)
|
39 |
+
html_theme_options = {
|
40 |
+
|
41 |
+
# Set the path to a special layout to include for the homepage
|
42 |
+
# "index_template": "homepage.html",
|
43 |
+
|
44 |
+
# Allow a separate homepage from the master_doc
|
45 |
+
# homepage = index
|
46 |
+
|
47 |
+
# Set the name of the project to appear in the nav menu
|
48 |
+
# "project_nav_name": "Guzzle",
|
49 |
+
|
50 |
+
# Set your Disqus short name to enable comments
|
51 |
+
# "disqus_comments_shortname": "my_disqus_comments_short_name",
|
52 |
+
|
53 |
+
# Set you GA account ID to enable tracking
|
54 |
+
# "google_analytics_account": "my_ga_account",
|
55 |
+
|
56 |
+
# Path to a touch icon
|
57 |
+
# "touch_icon": "",
|
58 |
+
|
59 |
+
# Specify a base_url used to generate sitemap.xml links. If not
|
60 |
+
# specified, then no sitemap will be built.
|
61 |
+
"base_url": "http://guzzlephp.org"
|
62 |
+
|
63 |
+
# Allow the "Table of Contents" page to be defined separately from "master_doc"
|
64 |
+
# tocpage = Contents
|
65 |
+
|
66 |
+
# Allow the project link to be overriden to a custom URL.
|
67 |
+
# projectlink = http://myproject.url
|
68 |
+
}
|
vendor/guzzlehttp/guzzle/docs/faq.rst
ADDED
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
===
|
2 |
+
FAQ
|
3 |
+
===
|
4 |
+
|
5 |
+
Does Guzzle require cURL?
|
6 |
+
=========================
|
7 |
+
|
8 |
+
No. Guzzle can use any HTTP handler to send requests. This means that Guzzle
|
9 |
+
can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries
|
10 |
+
like `React <http://reactphp.org/>`_. You just need to configure an HTTP handler
|
11 |
+
to use a different method of sending requests.
|
12 |
+
|
13 |
+
.. note::
|
14 |
+
|
15 |
+
Guzzle has historically only utilized cURL to send HTTP requests. cURL is
|
16 |
+
an amazing HTTP client (arguably the best), and Guzzle will continue to use
|
17 |
+
it by default when it is available. It is rare, but some developers don't
|
18 |
+
have cURL installed on their systems or run into version specific issues.
|
19 |
+
By allowing swappable HTTP handlers, Guzzle is now much more customizable
|
20 |
+
and able to adapt to fit the needs of more developers.
|
21 |
+
|
22 |
+
|
23 |
+
Can Guzzle send asynchronous requests?
|
24 |
+
======================================
|
25 |
+
|
26 |
+
Yes. You can use the ``requestAsync``, ``sendAsync``, ``getAsync``,
|
27 |
+
``headAsync``, ``putAsync``, ``postAsync``, ``deleteAsync``, and ``patchAsync``
|
28 |
+
methods of a client to send an asynchronous request. The client will return a
|
29 |
+
``GuzzleHttp\Promise\PromiseInterface`` object. You can chain ``then``
|
30 |
+
functions off of the promise.
|
31 |
+
|
32 |
+
.. code-block:: php
|
33 |
+
|
34 |
+
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
|
35 |
+
$promise->then(function ($response) {
|
36 |
+
echo 'Got a response! ' . $response->getStatusCode();
|
37 |
+
});
|
38 |
+
|
39 |
+
You can force an asynchronous response to complete using the ``wait()`` method
|
40 |
+
of the returned promise.
|
41 |
+
|
42 |
+
.. code-block:: php
|
43 |
+
|
44 |
+
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
|
45 |
+
$response = $promise->wait();
|
46 |
+
|
47 |
+
|
48 |
+
How can I add custom cURL options?
|
49 |
+
==================================
|
50 |
+
|
51 |
+
cURL offers a huge number of `customizable options <http://us1.php.net/curl_setopt>`_.
|
52 |
+
While Guzzle normalizes many of these options across different handlers, there
|
53 |
+
are times when you need to set custom cURL options. This can be accomplished
|
54 |
+
by passing an associative array of cURL settings in the **curl** key of a
|
55 |
+
request.
|
56 |
+
|
57 |
+
For example, let's say you need to customize the outgoing network interface
|
58 |
+
used with a client.
|
59 |
+
|
60 |
+
.. code-block:: php
|
61 |
+
|
62 |
+
$client->request('GET', '/', [
|
63 |
+
'curl' => [
|
64 |
+
CURLOPT_INTERFACE => 'xxx.xxx.xxx.xxx'
|
65 |
+
]
|
66 |
+
]);
|
67 |
+
|
68 |
+
If you use asynchronous requests with cURL multi handler and want to tweak it,
|
69 |
+
additional options can be specified as an associative array in the
|
70 |
+
**options** key of the ``CurlMultiHandler`` constructor.
|
71 |
+
|
72 |
+
.. code-block:: php
|
73 |
+
|
74 |
+
use \GuzzleHttp\Client;
|
75 |
+
use \GuzzleHttp\HandlerStack;
|
76 |
+
use \GuzzleHttp\Handler\CurlMultiHandler;
|
77 |
+
|
78 |
+
$client = new Client(['handler' => HandlerStack::create(new CurlMultiHandler([
|
79 |
+
'options' => [
|
80 |
+
CURLMOPT_MAX_TOTAL_CONNECTIONS => 50,
|
81 |
+
CURLMOPT_MAX_HOST_CONNECTIONS => 5,
|
82 |
+
]
|
83 |
+
]))]);
|
84 |
+
|
85 |
+
|
86 |
+
How can I add custom stream context options?
|
87 |
+
============================================
|
88 |
+
|
89 |
+
You can pass custom `stream context options <http://www.php.net/manual/en/context.php>`_
|
90 |
+
using the **stream_context** key of the request option. The **stream_context**
|
91 |
+
array is an associative array where each key is a PHP transport, and each value
|
92 |
+
is an associative array of transport options.
|
93 |
+
|
94 |
+
For example, let's say you need to customize the outgoing network interface
|
95 |
+
used with a client and allow self-signed certificates.
|
96 |
+
|
97 |
+
.. code-block:: php
|
98 |
+
|
99 |
+
$client->request('GET', '/', [
|
100 |
+
'stream' => true,
|
101 |
+
'stream_context' => [
|
102 |
+
'ssl' => [
|
103 |
+
'allow_self_signed' => true
|
104 |
+
],
|
105 |
+
'socket' => [
|
106 |
+
'bindto' => 'xxx.xxx.xxx.xxx'
|
107 |
+
]
|
108 |
+
]
|
109 |
+
]);
|
110 |
+
|
111 |
+
|
112 |
+
Why am I getting an SSL verification error?
|
113 |
+
===========================================
|
114 |
+
|
115 |
+
You need to specify the path on disk to the CA bundle used by Guzzle for
|
116 |
+
verifying the peer certificate. See :ref:`verify-option`.
|
117 |
+
|
118 |
+
|
119 |
+
What is this Maximum function nesting error?
|
120 |
+
============================================
|
121 |
+
|
122 |
+
Maximum function nesting level of '100' reached, aborting
|
123 |
+
|
124 |
+
You could run into this error if you have the XDebug extension installed and
|
125 |
+
you execute a lot of requests in callbacks. This error message comes
|
126 |
+
specifically from the XDebug extension. PHP itself does not have a function
|
127 |
+
nesting limit. Change this setting in your php.ini to increase the limit::
|
128 |
+
|
129 |
+
xdebug.max_nesting_level = 1000
|
130 |
+
|
131 |
+
|
132 |
+
Why am I getting a 417 error response?
|
133 |
+
======================================
|
134 |
+
|
135 |
+
This can occur for a number of reasons, but if you are sending PUT, POST, or
|
136 |
+
PATCH requests with an ``Expect: 100-Continue`` header, a server that does not
|
137 |
+
support this header will return a 417 response. You can work around this by
|
138 |
+
setting the ``expect`` request option to ``false``:
|
139 |
+
|
140 |
+
.. code-block:: php
|
141 |
+
|
142 |
+
$client = new GuzzleHttp\Client();
|
143 |
+
|
144 |
+
// Disable the expect header on a single request
|
145 |
+
$response = $client->request('PUT', '/', ['expect' => false]);
|
146 |
+
|
147 |
+
// Disable the expect header on all client requests
|
148 |
+
$client = new GuzzleHttp\Client(['expect' => false]);
|
149 |
+
|
150 |
+
How can I track redirected requests?
|
151 |
+
====================================
|
152 |
+
|
153 |
+
You can enable tracking of redirected URIs and status codes via the
|
154 |
+
`track_redirects` option. Each redirected URI and status code will be stored in the
|
155 |
+
``X-Guzzle-Redirect-History`` and the ``X-Guzzle-Redirect-Status-History``
|
156 |
+
header respectively.
|
157 |
+
|
158 |
+
The initial request's URI and the final status code will be excluded from the results.
|
159 |
+
With this in mind you should be able to easily track a request's full redirect path.
|
160 |
+
|
161 |
+
For example, let's say you need to track redirects and provide both results
|
162 |
+
together in a single report:
|
163 |
+
|
164 |
+
.. code-block:: php
|
165 |
+
|
166 |
+
// First you configure Guzzle with redirect tracking and make a request
|
167 |
+
$client = new Client([
|
168 |
+
RequestOptions::ALLOW_REDIRECTS => [
|
169 |
+
'max' => 10, // allow at most 10 redirects.
|
170 |
+
'strict' => true, // use "strict" RFC compliant redirects.
|
171 |
+
'referer' => true, // add a Referer header
|
172 |
+
'track_redirects' => true,
|
173 |
+
],
|
174 |
+
]);
|
175 |
+
$initialRequest = '/redirect/3'; // Store the request URI for later use
|
176 |
+
$response = $client->request('GET', $initialRequest); // Make your request
|
177 |
+
|
178 |
+
// Retrieve both Redirect History headers
|
179 |
+
$redirectUriHistory = $response->getHeader('X-Guzzle-Redirect-History')[0]; // retrieve Redirect URI history
|
180 |
+
$redirectCodeHistory = $response->getHeader('X-Guzzle-Redirect-Status-History')[0]; // retrieve Redirect HTTP Status history
|
181 |
+
|
182 |
+
// Add the initial URI requested to the (beginning of) URI history
|
183 |
+
array_unshift($redirectUriHistory, $initialRequest);
|
184 |
+
|
185 |
+
// Add the final HTTP status code to the end of HTTP response history
|
186 |
+
array_push($redirectCodeHistory, $response->getStatusCode());
|
187 |
+
|
188 |
+
// (Optional) Combine the items of each array into a single result set
|
189 |
+
$fullRedirectReport = [];
|
190 |
+
foreach ($redirectUriHistory as $key => $value) {
|
191 |
+
$fullRedirectReport[$key] = ['location' => $value, 'code' => $redirectCodeHistory[$key]];
|
192 |
+
}
|
193 |
+
echo json_encode($fullRedirectReport);
|
vendor/guzzlehttp/guzzle/docs/handlers-and-middleware.rst
ADDED
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=======================
|
2 |
+
Handlers and Middleware
|
3 |
+
=======================
|
4 |
+
|
5 |
+
Guzzle clients use a handler and middleware system to send HTTP requests.
|
6 |
+
|
7 |
+
Handlers
|
8 |
+
========
|
9 |
+
|
10 |
+
A handler function accepts a ``Psr\Http\Message\RequestInterface`` and array of
|
11 |
+
request options and returns a ``GuzzleHttp\Promise\PromiseInterface`` that is
|
12 |
+
fulfilled with a ``Psr\Http\Message\ResponseInterface`` or rejected with an
|
13 |
+
exception.
|
14 |
+
|
15 |
+
You can provide a custom handler to a client using the ``handler`` option of
|
16 |
+
a client constructor. It is important to understand that several request
|
17 |
+
options used by Guzzle require that specific middlewares wrap the handler used
|
18 |
+
by the client. You can ensure that the handler you provide to a client uses the
|
19 |
+
default middlewares by wrapping the handler in the
|
20 |
+
``GuzzleHttp\HandlerStack::create(callable $handler = null)`` static method.
|
21 |
+
|
22 |
+
.. code-block:: php
|
23 |
+
|
24 |
+
use GuzzleHttp\Client;
|
25 |
+
use GuzzleHttp\HandlerStack;
|
26 |
+
use GuzzleHttp\Handler\CurlHandler;
|
27 |
+
|
28 |
+
$handler = new CurlHandler();
|
29 |
+
$stack = HandlerStack::create($handler); // Wrap w/ middleware
|
30 |
+
$client = new Client(['handler' => $stack]);
|
31 |
+
|
32 |
+
The ``create`` method adds default handlers to the ``HandlerStack``. When the
|
33 |
+
``HandlerStack`` is resolved, the handlers will execute in the following order:
|
34 |
+
|
35 |
+
1. Sending request:
|
36 |
+
|
37 |
+
1. ``http_errors`` - No op when sending a request. The response status code
|
38 |
+
is checked in the response processing when returning a response promise up
|
39 |
+
the stack.
|
40 |
+
2. ``allow_redirects`` - No op when sending a request. Following redirects
|
41 |
+
occurs when a response promise is being returned up the stack.
|
42 |
+
3. ``cookies`` - Adds cookies to requests.
|
43 |
+
4. ``prepare_body`` - The body of an HTTP request will be prepared (e.g.,
|
44 |
+
add default headers like Content-Length, Content-Type, etc.).
|
45 |
+
5. <send request with handler>
|
46 |
+
|
47 |
+
2. Processing response:
|
48 |
+
|
49 |
+
1. ``prepare_body`` - no op on response processing.
|
50 |
+
2. ``cookies`` - extracts response cookies into the cookie jar.
|
51 |
+
3. ``allow_redirects`` - Follows redirects.
|
52 |
+
4. ``http_errors`` - throws exceptions when the response status code ``>=``
|
53 |
+
400.
|
54 |
+
|
55 |
+
When provided no ``$handler`` argument, ``GuzzleHttp\HandlerStack::create()``
|
56 |
+
will choose the most appropriate handler based on the extensions available on
|
57 |
+
your system.
|
58 |
+
|
59 |
+
.. important::
|
60 |
+
|
61 |
+
The handler provided to a client determines how request options are applied
|
62 |
+
and utilized for each request sent by a client. For example, if you do not
|
63 |
+
have a cookie middleware associated with a client, then setting the
|
64 |
+
``cookies`` request option will have no effect on the request.
|
65 |
+
|
66 |
+
|
67 |
+
Middleware
|
68 |
+
==========
|
69 |
+
|
70 |
+
Middleware augments the functionality of handlers by invoking them in the
|
71 |
+
process of generating responses. Middleware is implemented as a higher order
|
72 |
+
function that takes the following form.
|
73 |
+
|
74 |
+
.. code-block:: php
|
75 |
+
|
76 |
+
use Psr\Http\Message\RequestInterface;
|
77 |
+
|
78 |
+
function my_middleware()
|
79 |
+
{
|
80 |
+
return function (callable $handler) {
|
81 |
+
return function (RequestInterface $request, array $options) use ($handler) {
|
82 |
+
return $handler($request, $options);
|
83 |
+
};
|
84 |
+
};
|
85 |
+
}
|
86 |
+
|
87 |
+
Middleware functions return a function that accepts the next handler to invoke.
|
88 |
+
This returned function then returns another function that acts as a composed
|
89 |
+
handler-- it accepts a request and options, and returns a promise that is
|
90 |
+
fulfilled with a response. Your composed middleware can modify the request,
|
91 |
+
add custom request options, and modify the promise returned by the downstream
|
92 |
+
handler.
|
93 |
+
|
94 |
+
Here's an example of adding a header to each request.
|
95 |
+
|
96 |
+
.. code-block:: php
|
97 |
+
|
98 |
+
use Psr\Http\Message\RequestInterface;
|
99 |
+
|
100 |
+
function add_header($header, $value)
|
101 |
+
{
|
102 |
+
return function (callable $handler) use ($header, $value) {
|
103 |
+
return function (
|
104 |
+
RequestInterface $request,
|
105 |
+
array $options
|
106 |
+
) use ($handler, $header, $value) {
|
107 |
+
$request = $request->withHeader($header, $value);
|
108 |
+
return $handler($request, $options);
|
109 |
+
};
|
110 |
+
};
|
111 |
+
}
|
112 |
+
|
113 |
+
Once a middleware has been created, you can add it to a client by either
|
114 |
+
wrapping the handler used by the client or by decorating a handler stack.
|
115 |
+
|
116 |
+
.. code-block:: php
|
117 |
+
|
118 |
+
use GuzzleHttp\HandlerStack;
|
119 |
+
use GuzzleHttp\Handler\CurlHandler;
|
120 |
+
use GuzzleHttp\Client;
|
121 |
+
|
122 |
+
$stack = new HandlerStack();
|
123 |
+
$stack->setHandler(new CurlHandler());
|
124 |
+
$stack->push(add_header('X-Foo', 'bar'));
|
125 |
+
$client = new Client(['handler' => $stack]);
|
126 |
+
|
127 |
+
Now when you send a request, the client will use a handler composed with your
|
128 |
+
added middleware, adding a header to each request.
|
129 |
+
|
130 |
+
Here's an example of creating a middleware that modifies the response of the
|
131 |
+
downstream handler. This example adds a header to the response.
|
132 |
+
|
133 |
+
.. code-block:: php
|
134 |
+
|
135 |
+
use Psr\Http\Message\RequestInterface;
|
136 |
+
use Psr\Http\Message\ResponseInterface;
|
137 |
+
use GuzzleHttp\HandlerStack;
|
138 |
+
use GuzzleHttp\Handler\CurlHandler;
|
139 |
+
use GuzzleHttp\Client;
|
140 |
+
|
141 |
+
function add_response_header($header, $value)
|
142 |
+
{
|
143 |
+
return function (callable $handler) use ($header, $value) {
|
144 |
+
return function (
|
145 |
+
RequestInterface $request,
|
146 |
+
array $options
|
147 |
+
) use ($handler, $header, $value) {
|
148 |
+
$promise = $handler($request, $options);
|
149 |
+
return $promise->then(
|
150 |
+
function (ResponseInterface $response) use ($header, $value) {
|
151 |
+
return $response->withHeader($header, $value);
|
152 |
+
}
|
153 |
+
);
|
154 |
+
};
|
155 |
+
};
|
156 |
+
}
|
157 |
+
|
158 |
+
$stack = new HandlerStack();
|
159 |
+
$stack->setHandler(new CurlHandler());
|
160 |
+
$stack->push(add_response_header('X-Foo', 'bar'));
|
161 |
+
$client = new Client(['handler' => $stack]);
|
162 |
+
|
163 |
+
Creating a middleware that modifies a request is made much simpler using the
|
164 |
+
``GuzzleHttp\Middleware::mapRequest()`` middleware. This middleware accepts
|
165 |
+
a function that takes the request argument and returns the request to send.
|
166 |
+
|
167 |
+
.. code-block:: php
|
168 |
+
|
169 |
+
use Psr\Http\Message\RequestInterface;
|
170 |
+
use GuzzleHttp\HandlerStack;
|
171 |
+
use GuzzleHttp\Handler\CurlHandler;
|
172 |
+
use GuzzleHttp\Client;
|
173 |
+
use GuzzleHttp\Middleware;
|
174 |
+
|
175 |
+
$stack = new HandlerStack();
|
176 |
+
$stack->setHandler(new CurlHandler());
|
177 |
+
|
178 |
+
$stack->push(Middleware::mapRequest(function (RequestInterface $request) {
|
179 |
+
return $request->withHeader('X-Foo', 'bar');
|
180 |
+
}));
|
181 |
+
|
182 |
+
$client = new Client(['handler' => $stack]);
|
183 |
+
|
184 |
+
Modifying a response is also much simpler using the
|
185 |
+
``GuzzleHttp\Middleware::mapResponse()`` middleware.
|
186 |
+
|
187 |
+
.. code-block:: php
|
188 |
+
|
189 |
+
use Psr\Http\Message\ResponseInterface;
|
190 |
+
use GuzzleHttp\HandlerStack;
|
191 |
+
use GuzzleHttp\Handler\CurlHandler;
|
192 |
+
use GuzzleHttp\Client;
|
193 |
+
use GuzzleHttp\Middleware;
|
194 |
+
|
195 |
+
$stack = new HandlerStack();
|
196 |
+
$stack->setHandler(new CurlHandler());
|
197 |
+
|
198 |
+
$stack->push(Middleware::mapResponse(function (ResponseInterface $response) {
|
199 |
+
return $response->withHeader('X-Foo', 'bar');
|
200 |
+
}));
|
201 |
+
|
202 |
+
$client = new Client(['handler' => $stack]);
|
203 |
+
|
204 |
+
|
205 |
+
HandlerStack
|
206 |
+
============
|
207 |
+
|
208 |
+
A handler stack represents a stack of middleware to apply to a base handler
|
209 |
+
function. You can push middleware to the stack to add to the top of the stack,
|
210 |
+
and unshift middleware onto the stack to add to the bottom of the stack. When
|
211 |
+
the stack is resolved, the handler is pushed onto the stack. Each value is
|
212 |
+
then popped off of the stack, wrapping the previous value popped off of the
|
213 |
+
stack.
|
214 |
+
|
215 |
+
.. code-block:: php
|
216 |
+
|
217 |
+
use Psr\Http\Message\RequestInterface;
|
218 |
+
use GuzzleHttp\HandlerStack;
|
219 |
+
use GuzzleHttp\Middleware;
|
220 |
+
use GuzzleHttp\Client;
|
221 |
+
|
222 |
+
$stack = new HandlerStack();
|
223 |
+
$stack->setHandler(\GuzzleHttp\choose_handler());
|
224 |
+
|
225 |
+
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
|
226 |
+
echo 'A';
|
227 |
+
return $r;
|
228 |
+
});
|
229 |
+
|
230 |
+
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
|
231 |
+
echo 'B';
|
232 |
+
return $r;
|
233 |
+
});
|
234 |
+
|
235 |
+
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
|
236 |
+
echo 'C';
|
237 |
+
return $r;
|
238 |
+
});
|
239 |
+
|
240 |
+
$client->request('GET', 'http://httpbin.org/');
|
241 |
+
// echoes 'ABC';
|
242 |
+
|
243 |
+
$stack->unshift(Middleware::mapRequest(function (RequestInterface $r) {
|
244 |
+
echo '0';
|
245 |
+
return $r;
|
246 |
+
});
|
247 |
+
|
248 |
+
$client = new Client(['handler' => $stack]);
|
249 |
+
$client->request('GET', 'http://httpbin.org/');
|
250 |
+
// echoes '0ABC';
|
251 |
+
|
252 |
+
You can give middleware a name, which allows you to add middleware before
|
253 |
+
other named middleware, after other named middleware, or remove middleware
|
254 |
+
by name.
|
255 |
+
|
256 |
+
.. code-block:: php
|
257 |
+
|
258 |
+
use Psr\Http\Message\RequestInterface;
|
259 |
+
use GuzzleHttp\Middleware;
|
260 |
+
|
261 |
+
// Add a middleware with a name
|
262 |
+
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
|
263 |
+
return $r->withHeader('X-Foo', 'Bar');
|
264 |
+
}, 'add_foo');
|
265 |
+
|
266 |
+
// Add a middleware before a named middleware (unshift before).
|
267 |
+
$stack->before('add_foo', Middleware::mapRequest(function (RequestInterface $r) {
|
268 |
+
return $r->withHeader('X-Baz', 'Qux');
|
269 |
+
}, 'add_baz');
|
270 |
+
|
271 |
+
// Add a middleware after a named middleware (pushed after).
|
272 |
+
$stack->after('add_baz', Middleware::mapRequest(function (RequestInterface $r) {
|
273 |
+
return $r->withHeader('X-Lorem', 'Ipsum');
|
274 |
+
});
|
275 |
+
|
276 |
+
// Remove a middleware by name
|
277 |
+
$stack->remove('add_foo');
|
278 |
+
|
279 |
+
|
280 |
+
Creating a Handler
|
281 |
+
==================
|
282 |
+
|
283 |
+
As stated earlier, a handler is a function accepts a
|
284 |
+
``Psr\Http\Message\RequestInterface`` and array of request options and returns
|
285 |
+
a ``GuzzleHttp\Promise\PromiseInterface`` that is fulfilled with a
|
286 |
+
``Psr\Http\Message\ResponseInterface`` or rejected with an exception.
|
287 |
+
|
288 |
+
A handler is responsible for applying the following :doc:`request-options`.
|
289 |
+
These request options are a subset of request options called
|
290 |
+
"transfer options".
|
291 |
+
|
292 |
+
- :ref:`cert-option`
|
293 |
+
- :ref:`connect_timeout-option`
|
294 |
+
- :ref:`debug-option`
|
295 |
+
- :ref:`delay-option`
|
296 |
+
- :ref:`decode_content-option`
|
297 |
+
- :ref:`expect-option`
|
298 |
+
- :ref:`proxy-option`
|
299 |
+
- :ref:`sink-option`
|
300 |
+
- :ref:`timeout-option`
|
301 |
+
- :ref:`ssl_key-option`
|
302 |
+
- :ref:`stream-option`
|
303 |
+
- :ref:`verify-option`
|
vendor/guzzlehttp/guzzle/docs/index.rst
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.. title:: Guzzle, PHP HTTP client
|
2 |
+
|
3 |
+
====================
|
4 |
+
Guzzle Documentation
|
5 |
+
====================
|
6 |
+
|
7 |
+
Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
|
8 |
+
trivial to integrate with web services.
|
9 |
+
|
10 |
+
- Simple interface for building query strings, POST requests, streaming large
|
11 |
+
uploads, streaming large downloads, using HTTP cookies, uploading JSON data,
|
12 |
+
etc...
|
13 |
+
- Can send both synchronous and asynchronous requests using the same interface.
|
14 |
+
- Uses PSR-7 interfaces for requests, responses, and streams. This allows you
|
15 |
+
to utilize other PSR-7 compatible libraries with Guzzle.
|
16 |
+
- Abstracts away the underlying HTTP transport, allowing you to write
|
17 |
+
environment and transport agnostic code; i.e., no hard dependency on cURL,
|
18 |
+
PHP streams, sockets, or non-blocking event loops.
|
19 |
+
- Middleware system allows you to augment and compose client behavior.
|
20 |
+
|
21 |
+
.. code-block:: php
|
22 |
+
|
23 |
+
$client = new GuzzleHttp\Client();
|
24 |
+
$res = $client->request('GET', 'https://api.github.com/user', [
|
25 |
+
'auth' => ['user', 'pass']
|
26 |
+
]);
|
27 |
+
echo $res->getStatusCode();
|
28 |
+
// "200"
|
29 |
+
echo $res->getHeader('content-type')[0];
|
30 |
+
// 'application/json; charset=utf8'
|
31 |
+
echo $res->getBody();
|
32 |
+
// {"type":"User"...'
|
33 |
+
|
34 |
+
// Send an asynchronous request.
|
35 |
+
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
|
36 |
+
$promise = $client->sendAsync($request)->then(function ($response) {
|
37 |
+
echo 'I completed! ' . $response->getBody();
|
38 |
+
});
|
39 |
+
$promise->wait();
|
40 |
+
|
41 |
+
|
42 |
+
User Guide
|
43 |
+
==========
|
44 |
+
|
45 |
+
.. toctree::
|
46 |
+
:maxdepth: 3
|
47 |
+
|
48 |
+
overview
|
49 |
+
quickstart
|
50 |
+
request-options
|
51 |
+
psr7
|
52 |
+
handlers-and-middleware
|
53 |
+
testing
|
54 |
+
faq
|
vendor/guzzlehttp/guzzle/docs/overview.rst
ADDED
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
========
|
2 |
+
Overview
|
3 |
+
========
|
4 |
+
|
5 |
+
Requirements
|
6 |
+
============
|
7 |
+
|
8 |
+
#. PHP 5.5.0
|
9 |
+
#. To use the PHP stream handler, ``allow_url_fopen`` must be enabled in your
|
10 |
+
system's php.ini.
|
11 |
+
#. To use the cURL handler, you must have a recent version of cURL >= 7.19.4
|
12 |
+
compiled with OpenSSL and zlib.
|
13 |
+
|
14 |
+
.. note::
|
15 |
+
|
16 |
+
Guzzle no longer requires cURL in order to send HTTP requests. Guzzle will
|
17 |
+
use the PHP stream wrapper to send HTTP requests if cURL is not installed.
|
18 |
+
Alternatively, you can provide your own HTTP handler used to send requests.
|
19 |
+
Keep in mind that cURL is still required for sending concurrent requests.
|
20 |
+
|
21 |
+
|
22 |
+
.. _installation:
|
23 |
+
|
24 |
+
|
25 |
+
Installation
|
26 |
+
============
|
27 |
+
|
28 |
+
The recommended way to install Guzzle is with
|
29 |
+
`Composer <http://getcomposer.org>`_. Composer is a dependency management tool
|
30 |
+
for PHP that allows you to declare the dependencies your project needs and
|
31 |
+
installs them into your project.
|
32 |
+
|
33 |
+
.. code-block:: bash
|
34 |
+
|
35 |
+
# Install Composer
|
36 |
+
curl -sS https://getcomposer.org/installer | php
|
37 |
+
|
38 |
+
You can add Guzzle as a dependency using the composer.phar CLI:
|
39 |
+
|
40 |
+
.. code-block:: bash
|
41 |
+
|
42 |
+
php composer.phar require guzzlehttp/guzzle:~6.0
|
43 |
+
|
44 |
+
Alternatively, you can specify Guzzle as a dependency in your project's
|
45 |
+
existing composer.json file:
|
46 |
+
|
47 |
+
.. code-block:: js
|
48 |
+
|
49 |
+
{
|
50 |
+
"require": {
|
51 |
+
"guzzlehttp/guzzle": "~6.0"
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
After installing, you need to require Composer's autoloader:
|
56 |
+
|
57 |
+
.. code-block:: php
|
58 |
+
|
59 |
+
require 'vendor/autoload.php';
|
60 |
+
|
61 |
+
You can find out more on how to install Composer, configure autoloading, and
|
62 |
+
other best-practices for defining dependencies at `getcomposer.org <http://getcomposer.org>`_.
|
63 |
+
|
64 |
+
|
65 |
+
Bleeding edge
|
66 |
+
-------------
|
67 |
+
|
68 |
+
During your development, you can keep up with the latest changes on the master
|
69 |
+
branch by setting the version requirement for Guzzle to ``~6.0@dev``.
|
70 |
+
|
71 |
+
.. code-block:: js
|
72 |
+
|
73 |
+
{
|
74 |
+
"require": {
|
75 |
+
"guzzlehttp/guzzle": "~6.0@dev"
|
76 |
+
}
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
License
|
81 |
+
=======
|
82 |
+
|
83 |
+
Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
|
84 |
+
|
85 |
+
Copyright (c) 2015 Michael Dowling <https://github.com/mtdowling>
|
86 |
+
|
87 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
88 |
+
of this software and associated documentation files (the "Software"), to deal
|
89 |
+
in the Software without restriction, including without limitation the rights
|
90 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
91 |
+
copies of the Software, and to permit persons to whom the Software is
|
92 |
+
furnished to do so, subject to the following conditions:
|
93 |
+
|
94 |
+
The above copyright notice and this permission notice shall be included in
|
95 |
+
all copies or substantial portions of the Software.
|
96 |
+
|
97 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
98 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
99 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
100 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
101 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
102 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
103 |
+
THE SOFTWARE.
|
104 |
+
|
105 |
+
|
106 |
+
Contributing
|
107 |
+
============
|
108 |
+
|
109 |
+
|
110 |
+
Guidelines
|
111 |
+
----------
|
112 |
+
|
113 |
+
1. Guzzle utilizes PSR-1, PSR-2, PSR-4, and PSR-7.
|
114 |
+
2. Guzzle is meant to be lean and fast with very few dependencies. This means
|
115 |
+
that not every feature request will be accepted.
|
116 |
+
3. Guzzle has a minimum PHP version requirement of PHP 5.5. Pull requests must
|
117 |
+
not require a PHP version greater than PHP 5.5 unless the feature is only
|
118 |
+
utilized conditionally.
|
119 |
+
4. All pull requests must include unit tests to ensure the change works as
|
120 |
+
expected and to prevent regressions.
|
121 |
+
|
122 |
+
|
123 |
+
Running the tests
|
124 |
+
-----------------
|
125 |
+
|
126 |
+
In order to contribute, you'll need to checkout the source from GitHub and
|
127 |
+
install Guzzle's dependencies using Composer:
|
128 |
+
|
129 |
+
.. code-block:: bash
|
130 |
+
|
131 |
+
git clone https://github.com/guzzle/guzzle.git
|
132 |
+
cd guzzle && curl -s http://getcomposer.org/installer | php && ./composer.phar install --dev
|
133 |
+
|
134 |
+
Guzzle is unit tested with PHPUnit. Run the tests using the Makefile:
|
135 |
+
|
136 |
+
.. code-block:: bash
|
137 |
+
|
138 |
+
make test
|
139 |
+
|
140 |
+
.. note::
|
141 |
+
|
142 |
+
You'll need to install node.js v0.5.0 or newer in order to perform
|
143 |
+
integration tests on Guzzle's HTTP handlers.
|
144 |
+
|
145 |
+
|
146 |
+
Reporting a security vulnerability
|
147 |
+
==================================
|
148 |
+
|
149 |
+
We want to ensure that Guzzle is a secure HTTP client library for everyone. If
|
150 |
+
you've discovered a security vulnerability in Guzzle, we appreciate your help
|
151 |
+
in disclosing it to us in a `responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
|
152 |
+
|
153 |
+
Publicly disclosing a vulnerability can put the entire community at risk. If
|
154 |
+
you've discovered a security concern, please email us at
|
155 |
+
security@guzzlephp.org. We'll work with you to make sure that we understand the
|
156 |
+
scope of the issue, and that we fully address your concern. We consider
|
157 |
+
correspondence sent to security@guzzlephp.org our highest priority, and work to
|
158 |
+
address any issues that arise as quickly as possible.
|
159 |
+
|
160 |
+
After a security vulnerability has been corrected, a security hotfix release will
|
161 |
+
be deployed as soon as possible.
|
vendor/guzzlehttp/guzzle/docs/psr7.rst
ADDED
@@ -0,0 +1,456 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
================
|
2 |
+
Guzzle and PSR-7
|
3 |
+
================
|
4 |
+
|
5 |
+
Guzzle utilizes PSR-7 as the HTTP message interface. This allows Guzzle to work
|
6 |
+
with any other library that utilizes PSR-7 message interfaces.
|
7 |
+
|
8 |
+
Guzzle is an HTTP client that sends HTTP requests to a server and receives HTTP
|
9 |
+
responses. Both requests and responses are referred to as messages.
|
10 |
+
|
11 |
+
Guzzle relies on the ``guzzlehttp/psr7`` Composer package for its message
|
12 |
+
implementation of PSR-7.
|
13 |
+
|
14 |
+
You can create a request using the ``GuzzleHttp\Psr7\Request`` class:
|
15 |
+
|
16 |
+
.. code-block:: php
|
17 |
+
|
18 |
+
use GuzzleHttp\Psr7\Request;
|
19 |
+
|
20 |
+
$request = new Request('GET', 'http://httpbin.org/get');
|
21 |
+
|
22 |
+
// You can provide other optional constructor arguments.
|
23 |
+
$headers = ['X-Foo' => 'Bar'];
|
24 |
+
$body = 'hello!';
|
25 |
+
$request = new Request('PUT', 'http://httpbin.org/put', $headers, $body);
|
26 |
+
|
27 |
+
You can create a response using the ``GuzzleHttp\Psr7\Response`` class:
|
28 |
+
|
29 |
+
.. code-block:: php
|
30 |
+
|
31 |
+
use GuzzleHttp\Psr7\Response;
|
32 |
+
|
33 |
+
// The constructor requires no arguments.
|
34 |
+
$response = new Response();
|
35 |
+
echo $response->getStatusCode(); // 200
|
36 |
+
echo $response->getProtocolVersion(); // 1.1
|
37 |
+
|
38 |
+
// You can supply any number of optional arguments.
|
39 |
+
$status = 200;
|
40 |
+
$headers = ['X-Foo' => 'Bar'];
|
41 |
+
$body = 'hello!';
|
42 |
+
$protocol = '1.1';
|
43 |
+
$response = new Response($status, $headers, $body, $protocol);
|
44 |
+
|
45 |
+
|
46 |
+
Headers
|
47 |
+
=======
|
48 |
+
|
49 |
+
Both request and response messages contain HTTP headers.
|
50 |
+
|
51 |
+
|
52 |
+
Accessing Headers
|
53 |
+
-----------------
|
54 |
+
|
55 |
+
You can check if a request or response has a specific header using the
|
56 |
+
``hasHeader()`` method.
|
57 |
+
|
58 |
+
.. code-block:: php
|
59 |
+
|
60 |
+
use GuzzleHttp\Psr7;
|
61 |
+
|
62 |
+
$request = new Psr7\Request('GET', '/', ['X-Foo' => 'bar']);
|
63 |
+
|
64 |
+
if ($request->hasHeader('X-Foo')) {
|
65 |
+
echo 'It is there';
|
66 |
+
}
|
67 |
+
|
68 |
+
You can retrieve all the header values as an array of strings using
|
69 |
+
``getHeader()``.
|
70 |
+
|
71 |
+
.. code-block:: php
|
72 |
+
|
73 |
+
$request->getHeader('X-Foo'); // ['bar']
|
74 |
+
|
75 |
+
// Retrieving a missing header returns an empty array.
|
76 |
+
$request->getHeader('X-Bar'); // []
|
77 |
+
|
78 |
+
You can iterate over the headers of a message using the ``getHeaders()``
|
79 |
+
method.
|
80 |
+
|
81 |
+
.. code-block:: php
|
82 |
+
|
83 |
+
foreach ($request->getHeaders() as $name => $values) {
|
84 |
+
echo $name . ': ' . implode(', ', $values) . "\r\n";
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
Complex Headers
|
89 |
+
---------------
|
90 |
+
|
91 |
+
Some headers contain additional key value pair information. For example, Link
|
92 |
+
headers contain a link and several key value pairs:
|
93 |
+
|
94 |
+
::
|
95 |
+
|
96 |
+
<http://foo.com>; rel="thing"; type="image/jpeg"
|
97 |
+
|
98 |
+
Guzzle provides a convenience feature that can be used to parse these types of
|
99 |
+
headers:
|
100 |
+
|
101 |
+
.. code-block:: php
|
102 |
+
|
103 |
+
use GuzzleHttp\Psr7;
|
104 |
+
|
105 |
+
$request = new Psr7\Request('GET', '/', [
|
106 |
+
'Link' => '<http:/.../front.jpeg>; rel="front"; type="image/jpeg"'
|
107 |
+
]);
|
108 |
+
|
109 |
+
$parsed = Psr7\parse_header($request->getHeader('Link'));
|
110 |
+
var_export($parsed);
|
111 |
+
|
112 |
+
Will output:
|
113 |
+
|
114 |
+
.. code-block:: php
|
115 |
+
|
116 |
+
array (
|
117 |
+
0 =>
|
118 |
+
array (
|
119 |
+
0 => '<http:/.../front.jpeg>',
|
120 |
+
'rel' => 'front',
|
121 |
+
'type' => 'image/jpeg',
|
122 |
+
),
|
123 |
+
)
|
124 |
+
|
125 |
+
The result contains a hash of key value pairs. Header values that have no key
|
126 |
+
(i.e., the link) are indexed numerically while headers parts that form a key
|
127 |
+
value pair are added as a key value pair.
|
128 |
+
|
129 |
+
|
130 |
+
Body
|
131 |
+
====
|
132 |
+
|
133 |
+
Both request and response messages can contain a body.
|
134 |
+
|
135 |
+
You can retrieve the body of a message using the ``getBody()`` method:
|
136 |
+
|
137 |
+
.. code-block:: php
|
138 |
+
|
139 |
+
$response = GuzzleHttp\get('http://httpbin.org/get');
|
140 |
+
echo $response->getBody();
|
141 |
+
// JSON string: { ... }
|
142 |
+
|
143 |
+
The body used in request and response objects is a
|
144 |
+
``Psr\Http\Message\StreamInterface``. This stream is used for both
|
145 |
+
uploading data and downloading data. Guzzle will, by default, store the body of
|
146 |
+
a message in a stream that uses PHP temp streams. When the size of the body
|
147 |
+
exceeds 2 MB, the stream will automatically switch to storing data on disk
|
148 |
+
rather than in memory (protecting your application from memory exhaustion).
|
149 |
+
|
150 |
+
The easiest way to create a body for a message is using the ``stream_for``
|
151 |
+
function from the ``GuzzleHttp\Psr7`` namespace --
|
152 |
+
``GuzzleHttp\Psr7\stream_for``. This function accepts strings, resources,
|
153 |
+
callables, iterators, other streamables, and returns an instance of
|
154 |
+
``Psr\Http\Message\StreamInterface``.
|
155 |
+
|
156 |
+
The body of a request or response can be cast to a string or you can read and
|
157 |
+
write bytes off of the stream as needed.
|
158 |
+
|
159 |
+
.. code-block:: php
|
160 |
+
|
161 |
+
use GuzzleHttp\Stream\Stream;
|
162 |
+
$response = $client->request('GET', 'http://httpbin.org/get');
|
163 |
+
|
164 |
+
echo $response->getBody()->read(4);
|
165 |
+
echo $response->getBody()->read(4);
|
166 |
+
echo $response->getBody()->read(1024);
|
167 |
+
var_export($response->eof());
|
168 |
+
|
169 |
+
|
170 |
+
Requests
|
171 |
+
========
|
172 |
+
|
173 |
+
Requests are sent from a client to a server. Requests include the method to
|
174 |
+
be applied to a resource, the identifier of the resource, and the protocol
|
175 |
+
version to use.
|
176 |
+
|
177 |
+
|
178 |
+
Request Methods
|
179 |
+
---------------
|
180 |
+
|
181 |
+
When creating a request, you are expected to provide the HTTP method you wish
|
182 |
+
to perform. You can specify any method you'd like, including a custom method
|
183 |
+
that might not be part of RFC 7231 (like "MOVE").
|
184 |
+
|
185 |
+
.. code-block:: php
|
186 |
+
|
187 |
+
// Create a request using a completely custom HTTP method
|
188 |
+
$request = new \GuzzleHttp\Psr7\Request('MOVE', 'http://httpbin.org/move');
|
189 |
+
|
190 |
+
echo $request->getMethod();
|
191 |
+
// MOVE
|
192 |
+
|
193 |
+
You can create and send a request using methods on a client that map to the
|
194 |
+
HTTP method you wish to use.
|
195 |
+
|
196 |
+
:GET: ``$client->get('http://httpbin.org/get', [/** options **/])``
|
197 |
+
:POST: ``$client->post('http://httpbin.org/post', [/** options **/])``
|
198 |
+
:HEAD: ``$client->head('http://httpbin.org/get', [/** options **/])``
|
199 |
+
:PUT: ``$client->put('http://httpbin.org/put', [/** options **/])``
|
200 |
+
:DELETE: ``$client->delete('http://httpbin.org/delete', [/** options **/])``
|
201 |
+
:OPTIONS: ``$client->options('http://httpbin.org/get', [/** options **/])``
|
202 |
+
:PATCH: ``$client->patch('http://httpbin.org/put', [/** options **/])``
|
203 |
+
|
204 |
+
For example:
|
205 |
+
|
206 |
+
.. code-block:: php
|
207 |
+
|
208 |
+
$response = $client->patch('http://httpbin.org/patch', ['body' => 'content']);
|
209 |
+
|
210 |
+
|
211 |
+
Request URI
|
212 |
+
-----------
|
213 |
+
|
214 |
+
The request URI is represented by a ``Psr\Http\Message\UriInterface`` object.
|
215 |
+
Guzzle provides an implementation of this interface using the
|
216 |
+
``GuzzleHttp\Psr7\Uri`` class.
|
217 |
+
|
218 |
+
When creating a request, you can provide the URI as a string or an instance of
|
219 |
+
``Psr\Http\Message\UriInterface``.
|
220 |
+
|
221 |
+
.. code-block:: php
|
222 |
+
|
223 |
+
$response = $client->request('GET', 'http://httpbin.org/get?q=foo');
|
224 |
+
|
225 |
+
|
226 |
+
Scheme
|
227 |
+
------
|
228 |
+
|
229 |
+
The `scheme <http://tools.ietf.org/html/rfc3986#section-3.1>`_ of a request
|
230 |
+
specifies the protocol to use when sending the request. When using Guzzle, the
|
231 |
+
scheme can be set to "http" or "https".
|
232 |
+
|
233 |
+
.. code-block:: php
|
234 |
+
|
235 |
+
$request = new Request('GET', 'http://httpbin.org');
|
236 |
+
echo $request->getUri()->getScheme(); // http
|
237 |
+
echo $request->getUri(); // http://httpbin.org
|
238 |
+
|
239 |
+
|
240 |
+
Host
|
241 |
+
----
|
242 |
+
|
243 |
+
The host is accessible using the URI owned by the request or by accessing the
|
244 |
+
Host header.
|
245 |
+
|
246 |
+
.. code-block:: php
|
247 |
+
|
248 |
+
$request = new Request('GET', 'http://httpbin.org');
|
249 |
+
echo $request->getUri()->getHost(); // httpbin.org
|
250 |
+
echo $request->getHeader('Host'); // httpbin.org
|
251 |
+
|
252 |
+
|
253 |
+
Port
|
254 |
+
----
|
255 |
+
|
256 |
+
No port is necessary when using the "http" or "https" schemes.
|
257 |
+
|
258 |
+
.. code-block:: php
|
259 |
+
|
260 |
+
$request = new Request('GET', 'http://httpbin.org:8080');
|
261 |
+
echo $request->getUri()->getPort(); // 8080
|
262 |
+
echo $request->getUri(); // http://httpbin.org:8080
|
263 |
+
|
264 |
+
|
265 |
+
Path
|
266 |
+
----
|
267 |
+
|
268 |
+
The path of a request is accessible via the URI object.
|
269 |
+
|
270 |
+
.. code-block:: php
|
271 |
+
|
272 |
+
$request = new Request('GET', 'http://httpbin.org/get');
|
273 |
+
echo $request->getUri()->getPath(); // /get
|
274 |
+
|
275 |
+
The contents of the path will be automatically filtered to ensure that only
|
276 |
+
allowed characters are present in the path. Any characters that are not allowed
|
277 |
+
in the path will be percent-encoded according to
|
278 |
+
`RFC 3986 section 3.3 <https://tools.ietf.org/html/rfc3986#section-3.3>`_
|
279 |
+
|
280 |
+
|
281 |
+
Query string
|
282 |
+
------------
|
283 |
+
|
284 |
+
The query string of a request can be accessed using the ``getQuery()`` of the
|
285 |
+
URI object owned by the request.
|
286 |
+
|
287 |
+
.. code-block:: php
|
288 |
+
|
289 |
+
$request = new Request('GET', 'http://httpbin.org/?foo=bar');
|
290 |
+
echo $request->getUri()->getQuery(); // foo=bar
|
291 |
+
|
292 |
+
The contents of the query string will be automatically filtered to ensure that
|
293 |
+
only allowed characters are present in the query string. Any characters that
|
294 |
+
are not allowed in the query string will be percent-encoded according to
|
295 |
+
`RFC 3986 section 3.4 <https://tools.ietf.org/html/rfc3986#section-3.4>`_
|
296 |
+
|
297 |
+
|
298 |
+
Responses
|
299 |
+
=========
|
300 |
+
|
301 |
+
Responses are the HTTP messages a client receives from a server after sending
|
302 |
+
an HTTP request message.
|
303 |
+
|
304 |
+
|
305 |
+
Start-Line
|
306 |
+
----------
|
307 |
+
|
308 |
+
The start-line of a response contains the protocol and protocol version,
|
309 |
+
status code, and reason phrase.
|
310 |
+
|
311 |
+
.. code-block:: php
|
312 |
+
|
313 |
+
$client = new \GuzzleHttp\Client();
|
314 |
+
$response = $client->request('GET', 'http://httpbin.org/get');
|
315 |
+
|
316 |
+
echo $response->getStatusCode(); // 200
|
317 |
+
echo $response->getReasonPhrase(); // OK
|
318 |
+
echo $response->getProtocolVersion(); // 1.1
|
319 |
+
|
320 |
+
|
321 |
+
Body
|
322 |
+
----
|
323 |
+
|
324 |
+
As described earlier, you can get the body of a response using the
|
325 |
+
``getBody()`` method.
|
326 |
+
|
327 |
+
.. code-block:: php
|
328 |
+
|
329 |
+
$body = $response->getBody();
|
330 |
+
echo $body;
|
331 |
+
// Cast to a string: { ... }
|
332 |
+
$body->seek(0);
|
333 |
+
// Rewind the body
|
334 |
+
$body->read(1024);
|
335 |
+
// Read bytes of the body
|
336 |
+
|
337 |
+
|
338 |
+
Streams
|
339 |
+
=======
|
340 |
+
|
341 |
+
Guzzle uses PSR-7 stream objects to represent request and response message
|
342 |
+
bodies. These stream objects allow you to work with various types of data all
|
343 |
+
using a common interface.
|
344 |
+
|
345 |
+
HTTP messages consist of a start-line, headers, and a body. The body of an HTTP
|
346 |
+
message can be very small or extremely large. Attempting to represent the body
|
347 |
+
of a message as a string can easily consume more memory than intended because
|
348 |
+
the body must be stored completely in memory. Attempting to store the body of a
|
349 |
+
request or response in memory would preclude the use of that implementation from
|
350 |
+
being able to work with large message bodies. The StreamInterface is used in
|
351 |
+
order to hide the implementation details of where a stream of data is read from
|
352 |
+
or written to.
|
353 |
+
|
354 |
+
The PSR-7 ``Psr\Http\Message\StreamInterface`` exposes several methods
|
355 |
+
that enable streams to be read from, written to, and traversed effectively.
|
356 |
+
|
357 |
+
Streams expose their capabilities using three methods: ``isReadable()``,
|
358 |
+
``isWritable()``, and ``isSeekable()``. These methods can be used by stream
|
359 |
+
collaborators to determine if a stream is capable of their requirements.
|
360 |
+
|
361 |
+
Each stream instance has various capabilities: they can be read-only,
|
362 |
+
write-only, read-write, allow arbitrary random access (seeking forwards or
|
363 |
+
backwards to any location), or only allow sequential access (for example in the
|
364 |
+
case of a socket or pipe).
|
365 |
+
|
366 |
+
Guzzle uses the ``guzzlehttp/psr7`` package to provide stream support. More
|
367 |
+
information on using streams, creating streams, converting streams to PHP
|
368 |
+
stream resource, and stream decorators can be found in the
|
369 |
+
`Guzzle PSR-7 documentation <https://github.com/guzzle/psr7/blob/master/README.md>`_.
|
370 |
+
|
371 |
+
|
372 |
+
Creating Streams
|
373 |
+
----------------
|
374 |
+
|
375 |
+
The best way to create a stream is using the ``GuzzleHttp\Psr7\stream_for``
|
376 |
+
function. This function accepts strings, resources returned from ``fopen()``,
|
377 |
+
an object that implements ``__toString()``, iterators, callables, and instances
|
378 |
+
of ``Psr\Http\Message\StreamInterface``.
|
379 |
+
|
380 |
+
.. code-block:: php
|
381 |
+
|
382 |
+
use GuzzleHttp\Psr7;
|
383 |
+
|
384 |
+
$stream = Psr7\stream_for('string data');
|
385 |
+
echo $stream;
|
386 |
+
// string data
|
387 |
+
echo $stream->read(3);
|
388 |
+
// str
|
389 |
+
echo $stream->getContents();
|
390 |
+
// ing data
|
391 |
+
var_export($stream->eof());
|
392 |
+
// true
|
393 |
+
var_export($stream->tell());
|
394 |
+
// 11
|
395 |
+
|
396 |
+
You can create streams from iterators. The iterator can yield any number of
|
397 |
+
bytes per iteration. Any excess bytes returned by the iterator that were not
|
398 |
+
requested by a stream consumer will be buffered until a subsequent read.
|
399 |
+
|
400 |
+
.. code-block:: php
|
401 |
+
|
402 |
+
use GuzzleHttp\Psr7;
|
403 |
+
|
404 |
+
$generator = function ($bytes) {
|
405 |
+
for ($i = 0; $i < $bytes; $i++) {
|
406 |
+
yield '.';
|
407 |
+
}
|
408 |
+
};
|
409 |
+
|
410 |
+
$iter = $generator(1024);
|
411 |
+
$stream = Psr7\stream_for($iter);
|
412 |
+
echo $stream->read(3); // ...
|
413 |
+
|
414 |
+
|
415 |
+
Metadata
|
416 |
+
--------
|
417 |
+
|
418 |
+
Streams expose stream metadata through the ``getMetadata()`` method. This
|
419 |
+
method provides the data you would retrieve when calling PHP's
|
420 |
+
`stream_get_meta_data() function <http://php.net/manual/en/function.stream-get-meta-data.php>`_,
|
421 |
+
and can optionally expose other custom data.
|
422 |
+
|
423 |
+
.. code-block:: php
|
424 |
+
|
425 |
+
use GuzzleHttp\Psr7;
|
426 |
+
|
427 |
+
$resource = fopen('/path/to/file', 'r');
|
428 |
+
$stream = Psr7\stream_for($resource);
|
429 |
+
echo $stream->getMetadata('uri');
|
430 |
+
// /path/to/file
|
431 |
+
var_export($stream->isReadable());
|
432 |
+
// true
|
433 |
+
var_export($stream->isWritable());
|
434 |
+
// false
|
435 |
+
var_export($stream->isSeekable());
|
436 |
+
// true
|
437 |
+
|
438 |
+
|
439 |
+
Stream Decorators
|
440 |
+
-----------------
|
441 |
+
|
442 |
+
Adding custom functionality to streams is very simple with stream decorators.
|
443 |
+
Guzzle provides several built-in decorators that provide additional stream
|
444 |
+
functionality.
|
445 |
+
|
446 |
+
- `AppendStream <https://github.com/guzzle/psr7#appendstream>`_
|
447 |
+
- `BufferStream <https://github.com/guzzle/psr7#bufferstream>`_
|
448 |
+
- `CachingStream <https://github.com/guzzle/psr7#cachingstream>`_
|
449 |
+
- `DroppingStream <https://github.com/guzzle/psr7#droppingstream>`_
|
450 |
+
- `FnStream <https://github.com/guzzle/psr7#fnstream>`_
|
451 |
+
- `InflateStream <https://github.com/guzzle/psr7#inflatestream>`_
|
452 |
+
- `LazyOpenStream <https://github.com/guzzle/psr7#lazyopenstream>`_
|
453 |
+
- `LimitStream <https://github.com/guzzle/psr7#limitstream>`_
|
454 |
+
- `MultipartStream <https://github.com/guzzle/psr7#multipartstream>`_
|
455 |
+
- `NoSeekStream <https://github.com/guzzle/psr7#noseekstream>`_
|
456 |
+
- `PumpStream <https://github.com/guzzle/psr7#pumpstream>`_
|
vendor/guzzlehttp/guzzle/docs/quickstart.rst
ADDED
@@ -0,0 +1,625 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
==========
|
2 |
+
Quickstart
|
3 |
+
==========
|
4 |
+
|
5 |
+
This page provides a quick introduction to Guzzle and introductory examples.
|
6 |
+
If you have not already installed, Guzzle, head over to the :ref:`installation`
|
7 |
+
page.
|
8 |
+
|
9 |
+
|
10 |
+
Making a Request
|
11 |
+
================
|
12 |
+
|
13 |
+
You can send requests with Guzzle using a ``GuzzleHttp\ClientInterface``
|
14 |
+
object.
|
15 |
+
|
16 |
+
|
17 |
+
Creating a Client
|
18 |
+
-----------------
|
19 |
+
|
20 |
+
.. code-block:: php
|
21 |
+
|
22 |
+
use GuzzleHttp\Client;
|
23 |
+
|
24 |
+
$client = new Client([
|
25 |
+
// Base URI is used with relative requests
|
26 |
+
'base_uri' => 'http://httpbin.org',
|
27 |
+
// You can set any number of default request options.
|
28 |
+
'timeout' => 2.0,
|
29 |
+
]);
|
30 |
+
|
31 |
+
Clients are immutable in Guzzle 6, which means that you cannot change the defaults used by a client after it's created.
|
32 |
+
|
33 |
+
The client constructor accepts an associative array of options:
|
34 |
+
|
35 |
+
``base_uri``
|
36 |
+
(string|UriInterface) Base URI of the client that is merged into relative
|
37 |
+
URIs. Can be a string or instance of UriInterface. When a relative URI
|
38 |
+
is provided to a client, the client will combine the base URI with the
|
39 |
+
relative URI using the rules described in
|
40 |
+
`RFC 3986, section 2 <http://tools.ietf.org/html/rfc3986#section-5.2>`_.
|
41 |
+
|
42 |
+
.. code-block:: php
|
43 |
+
|
44 |
+
// Create a client with a base URI
|
45 |
+
$client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']);
|
46 |
+
// Send a request to https://foo.com/api/test
|
47 |
+
$response = $client->request('GET', 'test');
|
48 |
+
// Send a request to https://foo.com/root
|
49 |
+
$response = $client->request('GET', '/root');
|
50 |
+
|
51 |
+
Don't feel like reading RFC 3986? Here are some quick examples on how a
|
52 |
+
``base_uri`` is resolved with another URI.
|
53 |
+
|
54 |
+
======================= ================== ===============================
|
55 |
+
base_uri URI Result
|
56 |
+
======================= ================== ===============================
|
57 |
+
``http://foo.com`` ``/bar`` ``http://foo.com/bar``
|
58 |
+
``http://foo.com/foo`` ``/bar`` ``http://foo.com/bar``
|
59 |
+
``http://foo.com/foo`` ``bar`` ``http://foo.com/bar``
|
60 |
+
``http://foo.com/foo/`` ``bar`` ``http://foo.com/foo/bar``
|
61 |
+
``http://foo.com`` ``http://baz.com`` ``http://baz.com``
|
62 |
+
``http://foo.com/?bar`` ``bar`` ``http://foo.com/bar``
|
63 |
+
======================= ================== ===============================
|
64 |
+
|
65 |
+
``handler``
|
66 |
+
(callable) Function that transfers HTTP requests over the wire. The
|
67 |
+
function is called with a ``Psr7\Http\Message\RequestInterface`` and array
|
68 |
+
of transfer options, and must return a
|
69 |
+
``GuzzleHttp\Promise\PromiseInterface`` that is fulfilled with a
|
70 |
+
``Psr7\Http\Message\ResponseInterface`` on success. ``handler`` is a
|
71 |
+
constructor only option that cannot be overridden in per/request options.
|
72 |
+
|
73 |
+
``...``
|
74 |
+
(mixed) All other options passed to the constructor are used as default
|
75 |
+
request options with every request created by the client.
|
76 |
+
|
77 |
+
|
78 |
+
Sending Requests
|
79 |
+
----------------
|
80 |
+
|
81 |
+
Magic methods on the client make it easy to send synchronous requests:
|
82 |
+
|
83 |
+
.. code-block:: php
|
84 |
+
|
85 |
+
$response = $client->get('http://httpbin.org/get');
|
86 |
+
$response = $client->delete('http://httpbin.org/delete');
|
87 |
+
$response = $client->head('http://httpbin.org/get');
|
88 |
+
$response = $client->options('http://httpbin.org/get');
|
89 |
+
$response = $client->patch('http://httpbin.org/patch');
|
90 |
+
$response = $client->post('http://httpbin.org/post');
|
91 |
+
$response = $client->put('http://httpbin.org/put');
|
92 |
+
|
93 |
+
You can create a request and then send the request with the client when you're
|
94 |
+
ready:
|
95 |
+
|
96 |
+
.. code-block:: php
|
97 |
+
|
98 |
+
use GuzzleHttp\Psr7\Request;
|
99 |
+
|
100 |
+
$request = new Request('PUT', 'http://httpbin.org/put');
|
101 |
+
$response = $client->send($request, ['timeout' => 2]);
|
102 |
+
|
103 |
+
Client objects provide a great deal of flexibility in how request are
|
104 |
+
transferred including default request options, default handler stack middleware
|
105 |
+
that are used by each request, and a base URI that allows you to send requests
|
106 |
+
with relative URIs.
|
107 |
+
|
108 |
+
You can find out more about client middleware in the
|
109 |
+
:doc:`handlers-and-middleware` page of the documentation.
|
110 |
+
|
111 |
+
|
112 |
+
Async Requests
|
113 |
+
--------------
|
114 |
+
|
115 |
+
You can send asynchronous requests using the magic methods provided by a client:
|
116 |
+
|
117 |
+
.. code-block:: php
|
118 |
+
|
119 |
+
$promise = $client->getAsync('http://httpbin.org/get');
|
120 |
+
$promise = $client->deleteAsync('http://httpbin.org/delete');
|
121 |
+
$promise = $client->headAsync('http://httpbin.org/get');
|
122 |
+
$promise = $client->optionsAsync('http://httpbin.org/get');
|
123 |
+
$promise = $client->patchAsync('http://httpbin.org/patch');
|
124 |
+
$promise = $client->postAsync('http://httpbin.org/post');
|
125 |
+
$promise = $client->putAsync('http://httpbin.org/put');
|
126 |
+
|
127 |
+
You can also use the `sendAsync()` and `requestAsync()` methods of a client:
|
128 |
+
|
129 |
+
.. code-block:: php
|
130 |
+
|
131 |
+
use GuzzleHttp\Psr7\Request;
|
132 |
+
|
133 |
+
// Create a PSR-7 request object to send
|
134 |
+
$headers = ['X-Foo' => 'Bar'];
|
135 |
+
$body = 'Hello!';
|
136 |
+
$request = new Request('HEAD', 'http://httpbin.org/head', $headers, $body);
|
137 |
+
$promise = $client->sendAsync($request);
|
138 |
+
|
139 |
+
// Or, if you don't need to pass in a request instance:
|
140 |
+
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
|
141 |
+
|
142 |
+
The promise returned by these methods implements the
|
143 |
+
`Promises/A+ spec <https://promisesaplus.com/>`_, provided by the
|
144 |
+
`Guzzle promises library <https://github.com/guzzle/promises>`_. This means
|
145 |
+
that you can chain ``then()`` calls off of the promise. These then calls are
|
146 |
+
either fulfilled with a successful ``Psr\Http\Message\ResponseInterface`` or
|
147 |
+
rejected with an exception.
|
148 |
+
|
149 |
+
.. code-block:: php
|
150 |
+
|
151 |
+
use Psr\Http\Message\ResponseInterface;
|
152 |
+
use GuzzleHttp\Exception\RequestException;
|
153 |
+
|
154 |
+
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
|
155 |
+
$promise->then(
|
156 |
+
function (ResponseInterface $res) {
|
157 |
+
echo $res->getStatusCode() . "\n";
|
158 |
+
},
|
159 |
+
function (RequestException $e) {
|
160 |
+
echo $e->getMessage() . "\n";
|
161 |
+
echo $e->getRequest()->getMethod();
|
162 |
+
}
|
163 |
+
);
|
164 |
+
|
165 |
+
|
166 |
+
Concurrent requests
|
167 |
+
-------------------
|
168 |
+
|
169 |
+
You can send multiple requests concurrently using promises and asynchronous
|
170 |
+
requests.
|
171 |
+
|
172 |
+
.. code-block:: php
|
173 |
+
|
174 |
+
use GuzzleHttp\Client;
|
175 |
+
use GuzzleHttp\Promise;
|
176 |
+
|
177 |
+
$client = new Client(['base_uri' => 'http://httpbin.org/']);
|
178 |
+
|
179 |
+
// Initiate each request but do not block
|
180 |
+
$promises = [
|
181 |
+
'image' => $client->getAsync('/image'),
|
182 |
+
'png' => $client->getAsync('/image/png'),
|
183 |
+
'jpeg' => $client->getAsync('/image/jpeg'),
|
184 |
+
'webp' => $client->getAsync('/image/webp')
|
185 |
+
];
|
186 |
+
|
187 |
+
// Wait for the requests to complete; throws a ConnectException
|
188 |
+
// if any of the requests fail
|
189 |
+
$responses = Promise\unwrap($promises);
|
190 |
+
|
191 |
+
// Wait for the requests to complete, even if some of them fail
|
192 |
+
$responses = Promise\settle($promises)->wait();
|
193 |
+
|
194 |
+
// You can access each response using the key of the promise
|
195 |
+
echo $responses['image']->getHeader('Content-Length')[0];
|
196 |
+
echo $responses['png']->getHeader('Content-Length')[0];
|
197 |
+
|
198 |
+
You can use the ``GuzzleHttp\Pool`` object when you have an indeterminate
|
199 |
+
amount of requests you wish to send.
|
200 |
+
|
201 |
+
.. code-block:: php
|
202 |
+
|
203 |
+
use GuzzleHttp\Client;
|
204 |
+
use GuzzleHttp\Exception\RequestException;
|
205 |
+
use GuzzleHttp\Pool;
|
206 |
+
use GuzzleHttp\Psr7\Request;
|
207 |
+
use GuzzleHttp\Psr7\Response;
|
208 |
+
|
209 |
+
$client = new Client();
|
210 |
+
|
211 |
+
$requests = function ($total) {
|
212 |
+
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
|
213 |
+
for ($i = 0; $i < $total; $i++) {
|
214 |
+
yield new Request('GET', $uri);
|
215 |
+
}
|
216 |
+
};
|
217 |
+
|
218 |
+
$pool = new Pool($client, $requests(100), [
|
219 |
+
'concurrency' => 5,
|
220 |
+
'fulfilled' => function (Response $response, $index) {
|
221 |
+
// this is delivered each successful response
|
222 |
+
},
|
223 |
+
'rejected' => function (RequestException $reason, $index) {
|
224 |
+
// this is delivered each failed request
|
225 |
+
},
|
226 |
+
]);
|
227 |
+
|
228 |
+
// Initiate the transfers and create a promise
|
229 |
+
$promise = $pool->promise();
|
230 |
+
|
231 |
+
// Force the pool of requests to complete.
|
232 |
+
$promise->wait();
|
233 |
+
|
234 |
+
Or using a closure that will return a promise once the pool calls the closure.
|
235 |
+
|
236 |
+
.. code-block:: php
|
237 |
+
|
238 |
+
$client = new Client();
|
239 |
+
|
240 |
+
$requests = function ($total) use ($client) {
|
241 |
+
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
|
242 |
+
for ($i = 0; $i < $total; $i++) {
|
243 |
+
yield function() use ($client, $uri) {
|
244 |
+
return $client->getAsync($uri);
|
245 |
+
};
|
246 |
+
}
|
247 |
+
};
|
248 |
+
|
249 |
+
$pool = new Pool($client, $requests(100));
|
250 |
+
|
251 |
+
|
252 |
+
Using Responses
|
253 |
+
===============
|
254 |
+
|
255 |
+
In the previous examples, we retrieved a ``$response`` variable or we were
|
256 |
+
delivered a response from a promise. The response object implements a PSR-7
|
257 |
+
response, ``Psr\Http\Message\ResponseInterface``, and contains lots of
|
258 |
+
helpful information.
|
259 |
+
|
260 |
+
You can get the status code and reason phrase of the response:
|
261 |
+
|
262 |
+
.. code-block:: php
|
263 |
+
|
264 |
+
$code = $response->getStatusCode(); // 200
|
265 |
+
$reason = $response->getReasonPhrase(); // OK
|
266 |
+
|
267 |
+
You can retrieve headers from the response:
|
268 |
+
|
269 |
+
.. code-block:: php
|
270 |
+
|
271 |
+
// Check if a header exists.
|
272 |
+
if ($response->hasHeader('Content-Length')) {
|
273 |
+
echo "It exists";
|
274 |
+
}
|
275 |
+
|
276 |
+
// Get a header from the response.
|
277 |
+
echo $response->getHeader('Content-Length')[0];
|
278 |
+
|
279 |
+
// Get all of the response headers.
|
280 |
+
foreach ($response->getHeaders() as $name => $values) {
|
281 |
+
echo $name . ': ' . implode(', ', $values) . "\r\n";
|
282 |
+
}
|
283 |
+
|
284 |
+
The body of a response can be retrieved using the ``getBody`` method. The body
|
285 |
+
can be used as a string, cast to a string, or used as a stream like object.
|
286 |
+
|
287 |
+
.. code-block:: php
|
288 |
+
|
289 |
+
$body = $response->getBody();
|
290 |
+
// Implicitly cast the body to a string and echo it
|
291 |
+
echo $body;
|
292 |
+
// Explicitly cast the body to a string
|
293 |
+
$stringBody = (string) $body;
|
294 |
+
// Read 10 bytes from the body
|
295 |
+
$tenBytes = $body->read(10);
|
296 |
+
// Read the remaining contents of the body as a string
|
297 |
+
$remainingBytes = $body->getContents();
|
298 |
+
|
299 |
+
|
300 |
+
Query String Parameters
|
301 |
+
=======================
|
302 |
+
|
303 |
+
You can provide query string parameters with a request in several ways.
|
304 |
+
|
305 |
+
You can set query string parameters in the request's URI:
|
306 |
+
|
307 |
+
.. code-block:: php
|
308 |
+
|
309 |
+
$response = $client->request('GET', 'http://httpbin.org?foo=bar');
|
310 |
+
|
311 |
+
You can specify the query string parameters using the ``query`` request
|
312 |
+
option as an array.
|
313 |
+
|
314 |
+
.. code-block:: php
|
315 |
+
|
316 |
+
$client->request('GET', 'http://httpbin.org', [
|
317 |
+
'query' => ['foo' => 'bar']
|
318 |
+
]);
|
319 |
+
|
320 |
+
Providing the option as an array will use PHP's ``http_build_query`` function
|
321 |
+
to format the query string.
|
322 |
+
|
323 |
+
And finally, you can provide the ``query`` request option as a string.
|
324 |
+
|
325 |
+
.. code-block:: php
|
326 |
+
|
327 |
+
$client->request('GET', 'http://httpbin.org', ['query' => 'foo=bar']);
|
328 |
+
|
329 |
+
|
330 |
+
Uploading Data
|
331 |
+
==============
|
332 |
+
|
333 |
+
Guzzle provides several methods for uploading data.
|
334 |
+
|
335 |
+
You can send requests that contain a stream of data by passing a string,
|
336 |
+
resource returned from ``fopen``, or an instance of a
|
337 |
+
``Psr\Http\Message\StreamInterface`` to the ``body`` request option.
|
338 |
+
|
339 |
+
.. code-block:: php
|
340 |
+
|
341 |
+
// Provide the body as a string.
|
342 |
+
$r = $client->request('POST', 'http://httpbin.org/post', [
|
343 |
+
'body' => 'raw data'
|
344 |
+
]);
|
345 |
+
|
346 |
+
// Provide an fopen resource.
|
347 |
+
$body = fopen('/path/to/file', 'r');
|
348 |
+
$r = $client->request('POST', 'http://httpbin.org/post', ['body' => $body]);
|
349 |
+
|
350 |
+
// Use the stream_for() function to create a PSR-7 stream.
|
351 |
+
$body = \GuzzleHttp\Psr7\stream_for('hello!');
|
352 |
+
$r = $client->request('POST', 'http://httpbin.org/post', ['body' => $body]);
|
353 |
+
|
354 |
+
An easy way to upload JSON data and set the appropriate header is using the
|
355 |
+
``json`` request option:
|
356 |
+
|
357 |
+
.. code-block:: php
|
358 |
+
|
359 |
+
$r = $client->request('PUT', 'http://httpbin.org/put', [
|
360 |
+
'json' => ['foo' => 'bar']
|
361 |
+
]);
|
362 |
+
|
363 |
+
|
364 |
+
POST/Form Requests
|
365 |
+
------------------
|
366 |
+
|
367 |
+
In addition to specifying the raw data of a request using the ``body`` request
|
368 |
+
option, Guzzle provides helpful abstractions over sending POST data.
|
369 |
+
|
370 |
+
|
371 |
+
Sending form fields
|
372 |
+
~~~~~~~~~~~~~~~~~~~
|
373 |
+
|
374 |
+
Sending ``application/x-www-form-urlencoded`` POST requests requires that you
|
375 |
+
specify the POST fields as an array in the ``form_params`` request options.
|
376 |
+
|
377 |
+
.. code-block:: php
|
378 |
+
|
379 |
+
$response = $client->request('POST', 'http://httpbin.org/post', [
|
380 |
+
'form_params' => [
|
381 |
+
'field_name' => 'abc',
|
382 |
+
'other_field' => '123',
|
383 |
+
'nested_field' => [
|
384 |
+
'nested' => 'hello'
|
385 |
+
]
|
386 |
+
]
|
387 |
+
]);
|
388 |
+
|
389 |
+
|
390 |
+
Sending form files
|
391 |
+
~~~~~~~~~~~~~~~~~~
|
392 |
+
|
393 |
+
You can send files along with a form (``multipart/form-data`` POST requests),
|
394 |
+
using the ``multipart`` request option. ``multipart`` accepts an array of
|
395 |
+
associative arrays, where each associative array contains the following keys:
|
396 |
+
|
397 |
+
- name: (required, string) key mapping to the form field name.
|
398 |
+
- contents: (required, mixed) Provide a string to send the contents of the
|
399 |
+
file as a string, provide an fopen resource to stream the contents from a
|
400 |
+
PHP stream, or provide a ``Psr\Http\Message\StreamInterface`` to stream
|
401 |
+
the contents from a PSR-7 stream.
|
402 |
+
|
403 |
+
.. code-block:: php
|
404 |
+
|
405 |
+
$response = $client->request('POST', 'http://httpbin.org/post', [
|
406 |
+
'multipart' => [
|
407 |
+
[
|
408 |
+
'name' => 'field_name',
|
409 |
+
'contents' => 'abc'
|
410 |
+
],
|
411 |
+
[
|
412 |
+
'name' => 'file_name',
|
413 |
+
'contents' => fopen('/path/to/file', 'r')
|
414 |
+
],
|
415 |
+
[
|
416 |
+
'name' => 'other_file',
|
417 |
+
'contents' => 'hello',
|
418 |
+
'filename' => 'filename.txt',
|
419 |
+
'headers' => [
|
420 |
+
'X-Foo' => 'this is an extra header to include'
|
421 |
+
]
|
422 |
+
]
|
423 |
+
]
|
424 |
+
]);
|
425 |
+
|
426 |
+
|
427 |
+
Cookies
|
428 |
+
=======
|
429 |
+
|
430 |
+
Guzzle can maintain a cookie session for you if instructed using the
|
431 |
+
``cookies`` request option. When sending a request, the ``cookies`` option
|
432 |
+
must be set to an instance of ``GuzzleHttp\Cookie\CookieJarInterface``.
|
433 |
+
|
434 |
+
.. code-block:: php
|
435 |
+
|
436 |
+
// Use a specific cookie jar
|
437 |
+
$jar = new \GuzzleHttp\Cookie\CookieJar;
|
438 |
+
$r = $client->request('GET', 'http://httpbin.org/cookies', [
|
439 |
+
'cookies' => $jar
|
440 |
+
]);
|
441 |
+
|
442 |
+
You can set ``cookies`` to ``true`` in a client constructor if you would like
|
443 |
+
to use a shared cookie jar for all requests.
|
444 |
+
|
445 |
+
.. code-block:: php
|
446 |
+
|
447 |
+
// Use a shared client cookie jar
|
448 |
+
$client = new \GuzzleHttp\Client(['cookies' => true]);
|
449 |
+
$r = $client->request('GET', 'http://httpbin.org/cookies');
|
450 |
+
|
451 |
+
Different implementations exist for the ``GuzzleHttp\Cookie\CookieJarInterface``
|
452 |
+
:
|
453 |
+
|
454 |
+
- The ``GuzzleHttp\Cookie\CookieJar`` class stores cookies as an array.
|
455 |
+
- The ``GuzzleHttp\Cookie\FileCookieJar`` class persists non-session cookies
|
456 |
+
using a JSON formatted file.
|
457 |
+
- The ``GuzzleHttp\Cookie\SessionCookieJar`` class persists cookies in the
|
458 |
+
client session.
|
459 |
+
|
460 |
+
You can manually set cookies into a cookie jar with the named constructor
|
461 |
+
``fromArray(array $cookies, $domain)``.
|
462 |
+
|
463 |
+
.. code-block:: php
|
464 |
+
|
465 |
+
$jar = \GuzzleHttp\Cookie\CookieJar::fromArray(
|
466 |
+
[
|
467 |
+
'some_cookie' => 'foo',
|
468 |
+
'other_cookie' => 'barbaz1234'
|
469 |
+
],
|
470 |
+
'example.org'
|
471 |
+
);
|
472 |
+
|
473 |
+
You can get a cookie by its name with the ``getCookieByName($name)`` method
|
474 |
+
which returns a ``GuzzleHttp\Cookie\SetCookie`` instance.
|
475 |
+
|
476 |
+
.. code-block:: php
|
477 |
+
|
478 |
+
$cookie = $jar->getCookieByName('some_cookie');
|
479 |
+
|
480 |
+
$cookie->getValue(); // 'foo'
|
481 |
+
$cookie->getDomain(); // 'example.org'
|
482 |
+
$cookie->getExpires(); // expiration date as a Unix timestamp
|
483 |
+
|
484 |
+
The cookies can be also fetched into an array thanks to the `toArray()` method.
|
485 |
+
The ``GuzzleHttp\Cookie\CookieJarInterface`` interface extends
|
486 |
+
``Traversable`` so it can be iterated in a foreach loop.
|
487 |
+
|
488 |
+
|
489 |
+
Redirects
|
490 |
+
=========
|
491 |
+
|
492 |
+
Guzzle will automatically follow redirects unless you tell it not to. You can
|
493 |
+
customize the redirect behavior using the ``allow_redirects`` request option.
|
494 |
+
|
495 |
+
- Set to ``true`` to enable normal redirects with a maximum number of 5
|
496 |
+
redirects. This is the default setting.
|
497 |
+
- Set to ``false`` to disable redirects.
|
498 |
+
- Pass an associative array containing the 'max' key to specify the maximum
|
499 |
+
number of redirects and optionally provide a 'strict' key value to specify
|
500 |
+
whether or not to use strict RFC compliant redirects (meaning redirect POST
|
501 |
+
requests with POST requests vs. doing what most browsers do which is
|
502 |
+
redirect POST requests with GET requests).
|
503 |
+
|
504 |
+
.. code-block:: php
|
505 |
+
|
506 |
+
$response = $client->request('GET', 'http://github.com');
|
507 |
+
echo $response->getStatusCode();
|
508 |
+
// 200
|
509 |
+
|
510 |
+
The following example shows that redirects can be disabled.
|
511 |
+
|
512 |
+
.. code-block:: php
|
513 |
+
|
514 |
+
$response = $client->request('GET', 'http://github.com', [
|
515 |
+
'allow_redirects' => false
|
516 |
+
]);
|
517 |
+
echo $response->getStatusCode();
|
518 |
+
// 301
|
519 |
+
|
520 |
+
|
521 |
+
Exceptions
|
522 |
+
==========
|
523 |
+
|
524 |
+
**Tree View**
|
525 |
+
|
526 |
+
The following tree view describes how the Guzzle Exceptions depend
|
527 |
+
on each other.
|
528 |
+
|
529 |
+
.. code-block:: none
|
530 |
+
|
531 |
+
. \RuntimeException
|
532 |
+
├── SeekException (implements GuzzleException)
|
533 |
+
└── TransferException (implements GuzzleException)
|
534 |
+
└── RequestException
|
535 |
+
├── BadResponseException
|
536 |
+
│ ├── ServerException
|
537 |
+
│ └── ClientException
|
538 |
+
├── ConnectException
|
539 |
+
└── TooManyRedirectsException
|
540 |
+
|
541 |
+
Guzzle throws exceptions for errors that occur during a transfer.
|
542 |
+
|
543 |
+
- In the event of a networking error (connection timeout, DNS errors, etc.),
|
544 |
+
a ``GuzzleHttp\Exception\RequestException`` is thrown. This exception
|
545 |
+
extends from ``GuzzleHttp\Exception\TransferException``. Catching this
|
546 |
+
exception will catch any exception that can be thrown while transferring
|
547 |
+
requests.
|
548 |
+
|
549 |
+
.. code-block:: php
|
550 |
+
|
551 |
+
use GuzzleHttp\Psr7;
|
552 |
+
use GuzzleHttp\Exception\RequestException;
|
553 |
+
|
554 |
+
try {
|
555 |
+
$client->request('GET', 'https://github.com/_abc_123_404');
|
556 |
+
} catch (RequestException $e) {
|
557 |
+
echo Psr7\str($e->getRequest());
|
558 |
+
if ($e->hasResponse()) {
|
559 |
+
echo Psr7\str($e->getResponse());
|
560 |
+
}
|
561 |
+
}
|
562 |
+
|
563 |
+
- A ``GuzzleHttp\Exception\ConnectException`` exception is thrown in the
|
564 |
+
event of a networking error. This exception extends from
|
565 |
+
``GuzzleHttp\Exception\RequestException``.
|
566 |
+
|
567 |
+
- A ``GuzzleHttp\Exception\ClientException`` is thrown for 400
|
568 |
+
level errors if the ``http_errors`` request option is set to true. This
|
569 |
+
exception extends from ``GuzzleHttp\Exception\BadResponseException`` and
|
570 |
+
``GuzzleHttp\Exception\BadResponseException`` extends from
|
571 |
+
``GuzzleHttp\Exception\RequestException``.
|
572 |
+
|
573 |
+
.. code-block:: php
|
574 |
+
|
575 |
+
use GuzzleHttp\Psr7;
|
576 |
+
use GuzzleHttp\Exception\ClientException;
|
577 |
+
|
578 |
+
try {
|
579 |
+
$client->request('GET', 'https://github.com/_abc_123_404');
|
580 |
+
} catch (ClientException $e) {
|
581 |
+
echo Psr7\str($e->getRequest());
|
582 |
+
echo Psr7\str($e->getResponse());
|
583 |
+
}
|
584 |
+
|
585 |
+
- A ``GuzzleHttp\Exception\ServerException`` is thrown for 500 level
|
586 |
+
errors if the ``http_errors`` request option is set to true. This
|
587 |
+
exception extends from ``GuzzleHttp\Exception\BadResponseException``.
|
588 |
+
|
589 |
+
- A ``GuzzleHttp\Exception\TooManyRedirectsException`` is thrown when too
|
590 |
+
many redirects are followed. This exception extends from ``GuzzleHttp\Exception\RequestException``.
|
591 |
+
|
592 |
+
All of the above exceptions extend from
|
593 |
+
``GuzzleHttp\Exception\TransferException``.
|
594 |
+
|
595 |
+
|
596 |
+
Environment Variables
|
597 |
+
=====================
|
598 |
+
|
599 |
+
Guzzle exposes a few environment variables that can be used to customize the
|
600 |
+
behavior of the library.
|
601 |
+
|
602 |
+
``GUZZLE_CURL_SELECT_TIMEOUT``
|
603 |
+
Controls the duration in seconds that a curl_multi_* handler will use when
|
604 |
+
selecting on curl handles using ``curl_multi_select()``. Some systems
|
605 |
+
have issues with PHP's implementation of ``curl_multi_select()`` where
|
606 |
+
calling this function always results in waiting for the maximum duration of
|
607 |
+
the timeout.
|
608 |
+
``HTTP_PROXY``
|
609 |
+
Defines the proxy to use when sending requests using the "http" protocol.
|
610 |
+
|
611 |
+
Note: because the HTTP_PROXY variable may contain arbitrary user input on some (CGI) environments, the variable is only used on the CLI SAPI. See https://httpoxy.org for more information.
|
612 |
+
``HTTPS_PROXY``
|
613 |
+
Defines the proxy to use when sending requests using the "https" protocol.
|
614 |
+
``NO_PROXY``
|
615 |
+
Defines URLs for which a proxy should not be used. See :ref:`proxy-option` for usage.
|
616 |
+
|
617 |
+
|
618 |
+
Relevant ini Settings
|
619 |
+
---------------------
|
620 |
+
|
621 |
+
Guzzle can utilize PHP ini settings when configuring clients.
|
622 |
+
|
623 |
+
``openssl.cafile``
|
624 |
+
Specifies the path on disk to a CA file in PEM format to use when sending
|
625 |
+
requests over "https". See: https://wiki.php.net/rfc/tls-peer-verification#phpini_defaults
|
vendor/guzzlehttp/guzzle/docs/request-options.rst
ADDED
@@ -0,0 +1,1085 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
===============
|
2 |
+
Request Options
|
3 |
+
===============
|
4 |
+
|
5 |
+
You can customize requests created and transferred by a client using
|
6 |
+
**request options**. Request options control various aspects of a request
|
7 |
+
including, headers, query string parameters, timeout settings, the body of a
|
8 |
+
request, and much more.
|
9 |
+
|
10 |
+
All of the following examples use the following client:
|
11 |
+
|
12 |
+
.. code-block:: php
|
13 |
+
|
14 |
+
$client = new GuzzleHttp\Client(['base_uri' => 'http://httpbin.org']);
|
15 |
+
|
16 |
+
|
17 |
+
.. _allow_redirects-option:
|
18 |
+
|
19 |
+
allow_redirects
|
20 |
+
---------------
|
21 |
+
|
22 |
+
:Summary: Describes the redirect behavior of a request
|
23 |
+
:Types:
|
24 |
+
- bool
|
25 |
+
- array
|
26 |
+
:Default:
|
27 |
+
|
28 |
+
::
|
29 |
+
|
30 |
+
[
|
31 |
+
'max' => 5,
|
32 |
+
'strict' => false,
|
33 |
+
'referer' => false,
|
34 |
+
'protocols' => ['http', 'https'],
|
35 |
+
'track_redirects' => false
|
36 |
+
]
|
37 |
+
|
38 |
+
:Constant: ``GuzzleHttp\RequestOptions::ALLOW_REDIRECTS``
|
39 |
+
|
40 |
+
Set to ``false`` to disable redirects.
|
41 |
+
|
42 |
+
.. code-block:: php
|
43 |
+
|
44 |
+
$res = $client->request('GET', '/redirect/3', ['allow_redirects' => false]);
|
45 |
+
echo $res->getStatusCode();
|
46 |
+
// 302
|
47 |
+
|
48 |
+
Set to ``true`` (the default setting) to enable normal redirects with a maximum
|
49 |
+
number of 5 redirects.
|
50 |
+
|
51 |
+
.. code-block:: php
|
52 |
+
|
53 |
+
$res = $client->request('GET', '/redirect/3');
|
54 |
+
echo $res->getStatusCode();
|
55 |
+
// 200
|
56 |
+
|
57 |
+
You can also pass an associative array containing the following key value
|
58 |
+
pairs:
|
59 |
+
|
60 |
+
- max: (int, default=5) maximum number of allowed redirects.
|
61 |
+
- strict: (bool, default=false) Set to true to use strict redirects.
|
62 |
+
Strict RFC compliant redirects mean that POST redirect requests are sent as
|
63 |
+
POST requests vs. doing what most browsers do which is redirect POST requests
|
64 |
+
with GET requests.
|
65 |
+
- referer: (bool, default=false) Set to true to enable adding the Referer
|
66 |
+
header when redirecting.
|
67 |
+
- protocols: (array, default=['http', 'https']) Specified which protocols are
|
68 |
+
allowed for redirect requests.
|
69 |
+
- on_redirect: (callable) PHP callable that is invoked when a redirect
|
70 |
+
is encountered. The callable is invoked with the original request and the
|
71 |
+
redirect response that was received. Any return value from the on_redirect
|
72 |
+
function is ignored.
|
73 |
+
- track_redirects: (bool) When set to ``true``, each redirected URI and status
|
74 |
+
code encountered will be tracked in the ``X-Guzzle-Redirect-History`` and
|
75 |
+
``X-Guzzle-Redirect-Status-History`` headers respectively. All URIs and
|
76 |
+
status codes will be stored in the order which the redirects were encountered.
|
77 |
+
|
78 |
+
Note: When tracking redirects the ``X-Guzzle-Redirect-History`` header will
|
79 |
+
exclude the initial request's URI and the ``X-Guzzle-Redirect-Status-History``
|
80 |
+
header will exclude the final status code.
|
81 |
+
|
82 |
+
.. code-block:: php
|
83 |
+
|
84 |
+
use Psr\Http\Message\RequestInterface;
|
85 |
+
use Psr\Http\Message\ResponseInterface;
|
86 |
+
use Psr\Http\Message\UriInterface;
|
87 |
+
|
88 |
+
$onRedirect = function(
|
89 |
+
RequestInterface $request,
|
90 |
+
ResponseInterface $response,
|
91 |
+
UriInterface $uri
|
92 |
+
) {
|
93 |
+
echo 'Redirecting! ' . $request->getUri() . ' to ' . $uri . "\n";
|
94 |
+
};
|
95 |
+
|
96 |
+
$res = $client->request('GET', '/redirect/3', [
|
97 |
+
'allow_redirects' => [
|
98 |
+
'max' => 10, // allow at most 10 redirects.
|
99 |
+
'strict' => true, // use "strict" RFC compliant redirects.
|
100 |
+
'referer' => true, // add a Referer header
|
101 |
+
'protocols' => ['https'], // only allow https URLs
|
102 |
+
'on_redirect' => $onRedirect,
|
103 |
+
'track_redirects' => true
|
104 |
+
]
|
105 |
+
]);
|
106 |
+
|
107 |
+
echo $res->getStatusCode();
|
108 |
+
// 200
|
109 |
+
|
110 |
+
echo $res->getHeaderLine('X-Guzzle-Redirect-History');
|
111 |
+
// http://first-redirect, http://second-redirect, etc...
|
112 |
+
|
113 |
+
echo $res->getHeaderLine('X-Guzzle-Redirect-Status-History');
|
114 |
+
// 301, 302, etc...
|
115 |
+
|
116 |
+
.. warning::
|
117 |
+
|
118 |
+
This option only has an effect if your handler has the
|
119 |
+
``GuzzleHttp\Middleware::redirect`` middleware. This middleware is added
|
120 |
+
by default when a client is created with no handler, and is added by
|
121 |
+
default when creating a handler with ``GuzzleHttp\HandlerStack::create``.
|
122 |
+
|
123 |
+
|
124 |
+
auth
|
125 |
+
----
|
126 |
+
|
127 |
+
:Summary: Pass an array of HTTP authentication parameters to use with the
|
128 |
+
request. The array must contain the username in index [0], the password in
|
129 |
+
index [1], and you can optionally provide a built-in authentication type in
|
130 |
+
index [2]. Pass ``null`` to disable authentication for a request.
|
131 |
+
:Types:
|
132 |
+
- array
|
133 |
+
- string
|
134 |
+
- null
|
135 |
+
:Default: None
|
136 |
+
:Constant: ``GuzzleHttp\RequestOptions::AUTH``
|
137 |
+
|
138 |
+
The built-in authentication types are as follows:
|
139 |
+
|
140 |
+
basic
|
141 |
+
Use `basic HTTP authentication <http://www.ietf.org/rfc/rfc2069.txt>`_
|
142 |
+
in the ``Authorization`` header (the default setting used if none is
|
143 |
+
specified).
|
144 |
+
|
145 |
+
.. code-block:: php
|
146 |
+
|
147 |
+
$client->request('GET', '/get', ['auth' => ['username', 'password']]);
|
148 |
+
|
149 |
+
digest
|
150 |
+
Use `digest authentication <http://www.ietf.org/rfc/rfc2069.txt>`_
|
151 |
+
(must be supported by the HTTP handler).
|
152 |
+
|
153 |
+
.. code-block:: php
|
154 |
+
|
155 |
+
$client->request('GET', '/get', [
|
156 |
+
'auth' => ['username', 'password', 'digest']
|
157 |
+
]);
|
158 |
+
|
159 |
+
.. note::
|
160 |
+
|
161 |
+
This is currently only supported when using the cURL handler, but
|
162 |
+
creating a replacement that can be used with any HTTP handler is
|
163 |
+
planned.
|
164 |
+
|
165 |
+
ntlm
|
166 |
+
Use `Microsoft NTLM authentication <https://msdn.microsoft.com/en-us/library/windows/desktop/aa378749(v=vs.85).aspx>`_
|
167 |
+
(must be supported by the HTTP handler).
|
168 |
+
|
169 |
+
.. code-block:: php
|
170 |
+
|
171 |
+
$client->request('GET', '/get', [
|
172 |
+
'auth' => ['username', 'password', 'ntlm']
|
173 |
+
]);
|
174 |
+
|
175 |
+
.. note::
|
176 |
+
|
177 |
+
This is currently only supported when using the cURL handler.
|
178 |
+
|
179 |
+
|
180 |
+
body
|
181 |
+
----
|
182 |
+
|
183 |
+
:Summary: The ``body`` option is used to control the body of an entity
|
184 |
+
enclosing request (e.g., PUT, POST, PATCH).
|
185 |
+
:Types:
|
186 |
+
- string
|
187 |
+
- ``fopen()`` resource
|
188 |
+
- ``Psr\Http\Message\StreamInterface``
|
189 |
+
:Default: None
|
190 |
+
:Constant: ``GuzzleHttp\RequestOptions::BODY``
|
191 |
+
|
192 |
+
This setting can be set to any of the following types:
|
193 |
+
|
194 |
+
- string
|
195 |
+
|
196 |
+
.. code-block:: php
|
197 |
+
|
198 |
+
// You can send requests that use a string as the message body.
|
199 |
+
$client->request('PUT', '/put', ['body' => 'foo']);
|
200 |
+
|
201 |
+
- resource returned from ``fopen()``
|
202 |
+
|
203 |
+
.. code-block:: php
|
204 |
+
|
205 |
+
// You can send requests that use a stream resource as the body.
|
206 |
+
$resource = fopen('http://httpbin.org', 'r');
|
207 |
+
$client->request('PUT', '/put', ['body' => $resource]);
|
208 |
+
|
209 |
+
- ``Psr\Http\Message\StreamInterface``
|
210 |
+
|
211 |
+
.. code-block:: php
|
212 |
+
|
213 |
+
// You can send requests that use a Guzzle stream object as the body
|
214 |
+
$stream = GuzzleHttp\Psr7\stream_for('contents...');
|
215 |
+
$client->request('POST', '/post', ['body' => $stream]);
|
216 |
+
|
217 |
+
.. note::
|
218 |
+
|
219 |
+
This option cannot be used with ``form_params``, ``multipart``, or ``json``
|
220 |
+
|
221 |
+
|
222 |
+
.. _cert-option:
|
223 |
+
|
224 |
+
cert
|
225 |
+
----
|
226 |
+
|
227 |
+
:Summary: Set to a string to specify the path to a file containing a PEM
|
228 |
+
formatted client side certificate. If a password is required, then set to
|
229 |
+
an array containing the path to the PEM file in the first array element
|
230 |
+
followed by the password required for the certificate in the second array
|
231 |
+
element.
|
232 |
+
:Types:
|
233 |
+
- string
|
234 |
+
- array
|
235 |
+
:Default: None
|
236 |
+
:Constant: ``GuzzleHttp\RequestOptions::CERT``
|
237 |
+
|
238 |
+
.. code-block:: php
|
239 |
+
|
240 |
+
$client->request('GET', '/', ['cert' => ['/path/server.pem', 'password']]);
|
241 |
+
|
242 |
+
|
243 |
+
.. _cookies-option:
|
244 |
+
|
245 |
+
cookies
|
246 |
+
-------
|
247 |
+
|
248 |
+
:Summary: Specifies whether or not cookies are used in a request or what cookie
|
249 |
+
jar to use or what cookies to send.
|
250 |
+
:Types: ``GuzzleHttp\Cookie\CookieJarInterface``
|
251 |
+
:Default: None
|
252 |
+
:Constant: ``GuzzleHttp\RequestOptions::COOKIES``
|
253 |
+
|
254 |
+
You must specify the cookies option as a
|
255 |
+
``GuzzleHttp\Cookie\CookieJarInterface`` or ``false``.
|
256 |
+
|
257 |
+
.. code-block:: php
|
258 |
+
|
259 |
+
$jar = new \GuzzleHttp\Cookie\CookieJar();
|
260 |
+
$client->request('GET', '/get', ['cookies' => $jar]);
|
261 |
+
|
262 |
+
.. warning::
|
263 |
+
|
264 |
+
This option only has an effect if your handler has the
|
265 |
+
``GuzzleHttp\Middleware::cookies`` middleware. This middleware is added
|
266 |
+
by default when a client is created with no handler, and is added by
|
267 |
+
default when creating a handler with ``GuzzleHttp\default_handler``.
|
268 |
+
|
269 |
+
.. tip::
|
270 |
+
|
271 |
+
When creating a client, you can set the default cookie option to ``true``
|
272 |
+
to use a shared cookie session associated with the client.
|
273 |
+
|
274 |
+
|
275 |
+
.. _connect_timeout-option:
|
276 |
+
|
277 |
+
connect_timeout
|
278 |
+
---------------
|
279 |
+
|
280 |
+
:Summary: Float describing the number of seconds to wait while trying to connect
|
281 |
+
to a server. Use ``0`` to wait indefinitely (the default behavior).
|
282 |
+
:Types: float
|
283 |
+
:Default: ``0``
|
284 |
+
:Constant: ``GuzzleHttp\RequestOptions::CONNECT_TIMEOUT``
|
285 |
+
|
286 |
+
.. code-block:: php
|
287 |
+
|
288 |
+
// Timeout if the client fails to connect to the server in 3.14 seconds.
|
289 |
+
$client->request('GET', '/delay/5', ['connect_timeout' => 3.14]);
|
290 |
+
|
291 |
+
.. note::
|
292 |
+
|
293 |
+
This setting must be supported by the HTTP handler used to send a request.
|
294 |
+
``connect_timeout`` is currently only supported by the built-in cURL
|
295 |
+
handler.
|
296 |
+
|
297 |
+
|
298 |
+
.. _debug-option:
|
299 |
+
|
300 |
+
debug
|
301 |
+
-----
|
302 |
+
|
303 |
+
:Summary: Set to ``true`` or set to a PHP stream returned by ``fopen()`` to
|
304 |
+
enable debug output with the handler used to send a request. For example,
|
305 |
+
when using cURL to transfer requests, cURL's verbose of ``CURLOPT_VERBOSE``
|
306 |
+
will be emitted. When using the PHP stream wrapper, stream wrapper
|
307 |
+
notifications will be emitted. If set to true, the output is written to
|
308 |
+
PHP's STDOUT. If a PHP stream is provided, output is written to the stream.
|
309 |
+
:Types:
|
310 |
+
- bool
|
311 |
+
- ``fopen()`` resource
|
312 |
+
:Default: None
|
313 |
+
:Constant: ``GuzzleHttp\RequestOptions::DEBUG``
|
314 |
+
|
315 |
+
.. code-block:: php
|
316 |
+
|
317 |
+
$client->request('GET', '/get', ['debug' => true]);
|
318 |
+
|
319 |
+
Running the above example would output something like the following:
|
320 |
+
|
321 |
+
::
|
322 |
+
|
323 |
+
* About to connect() to httpbin.org port 80 (#0)
|
324 |
+
* Trying 107.21.213.98... * Connected to httpbin.org (107.21.213.98) port 80 (#0)
|
325 |
+
> GET /get HTTP/1.1
|
326 |
+
Host: httpbin.org
|
327 |
+
User-Agent: Guzzle/4.0 curl/7.21.4 PHP/5.5.7
|
328 |
+
|
329 |
+
< HTTP/1.1 200 OK
|
330 |
+
< Access-Control-Allow-Origin: *
|
331 |
+
< Content-Type: application/json
|
332 |
+
< Date: Sun, 16 Feb 2014 06:50:09 GMT
|
333 |
+
< Server: gunicorn/0.17.4
|
334 |
+
< Content-Length: 335
|
335 |
+
< Connection: keep-alive
|
336 |
+
<
|
337 |
+
* Connection #0 to host httpbin.org left intact
|
338 |
+
|
339 |
+
|
340 |
+
.. _decode_content-option:
|
341 |
+
|
342 |
+
decode_content
|
343 |
+
--------------
|
344 |
+
|
345 |
+
:Summary: Specify whether or not ``Content-Encoding`` responses (gzip,
|
346 |
+
deflate, etc.) are automatically decoded.
|
347 |
+
:Types:
|
348 |
+
- string
|
349 |
+
- bool
|
350 |
+
:Default: ``true``
|
351 |
+
:Constant: ``GuzzleHttp\RequestOptions::DECODE_CONTENT``
|
352 |
+
|
353 |
+
This option can be used to control how content-encoded response bodies are
|
354 |
+
handled. By default, ``decode_content`` is set to true, meaning any gzipped
|
355 |
+
or deflated response will be decoded by Guzzle.
|
356 |
+
|
357 |
+
When set to ``false``, the body of a response is never decoded, meaning the
|
358 |
+
bytes pass through the handler unchanged.
|
359 |
+
|
360 |
+
.. code-block:: php
|
361 |
+
|
362 |
+
// Request gzipped data, but do not decode it while downloading
|
363 |
+
$client->request('GET', '/foo.js', [
|
364 |
+
'headers' => ['Accept-Encoding' => 'gzip'],
|
365 |
+
'decode_content' => false
|
366 |
+
]);
|
367 |
+
|
368 |
+
When set to a string, the bytes of a response are decoded and the string value
|
369 |
+
provided to the ``decode_content`` option is passed as the ``Accept-Encoding``
|
370 |
+
header of the request.
|
371 |
+
|
372 |
+
.. code-block:: php
|
373 |
+
|
374 |
+
// Pass "gzip" as the Accept-Encoding header.
|
375 |
+
$client->request('GET', '/foo.js', ['decode_content' => 'gzip']);
|
376 |
+
|
377 |
+
|
378 |
+
.. _delay-option:
|
379 |
+
|
380 |
+
delay
|
381 |
+
-----
|
382 |
+
|
383 |
+
:Summary: The number of milliseconds to delay before sending the request.
|
384 |
+
:Types:
|
385 |
+
- integer
|
386 |
+
- float
|
387 |
+
:Default: null
|
388 |
+
:Constant: ``GuzzleHttp\RequestOptions::DELAY``
|
389 |
+
|
390 |
+
|
391 |
+
.. _expect-option:
|
392 |
+
|
393 |
+
expect
|
394 |
+
------
|
395 |
+
|
396 |
+
:Summary: Controls the behavior of the "Expect: 100-Continue" header.
|
397 |
+
:Types:
|
398 |
+
- bool
|
399 |
+
- integer
|
400 |
+
:Default: ``1048576``
|
401 |
+
:Constant: ``GuzzleHttp\RequestOptions::EXPECT``
|
402 |
+
|
403 |
+
Set to ``true`` to enable the "Expect: 100-Continue" header for all requests
|
404 |
+
that sends a body. Set to ``false`` to disable the "Expect: 100-Continue"
|
405 |
+
header for all requests. Set to a number so that the size of the payload must
|
406 |
+
be greater than the number in order to send the Expect header. Setting to a
|
407 |
+
number will send the Expect header for all requests in which the size of the
|
408 |
+
payload cannot be determined or where the body is not rewindable.
|
409 |
+
|
410 |
+
By default, Guzzle will add the "Expect: 100-Continue" header when the size of
|
411 |
+
the body of a request is greater than 1 MB and a request is using HTTP/1.1.
|
412 |
+
|
413 |
+
.. note::
|
414 |
+
|
415 |
+
This option only takes effect when using HTTP/1.1. The HTTP/1.0 and
|
416 |
+
HTTP/2.0 protocols do not support the "Expect: 100-Continue" header.
|
417 |
+
Support for handling the "Expect: 100-Continue" workflow must be
|
418 |
+
implemented by Guzzle HTTP handlers used by a client.
|
419 |
+
|
420 |
+
|
421 |
+
force_ip_resolve
|
422 |
+
----------------
|
423 |
+
|
424 |
+
:Summary: Set to "v4" if you want the HTTP handlers to use only ipv4 protocol or "v6" for ipv6 protocol.
|
425 |
+
:Types: string
|
426 |
+
:Default: null
|
427 |
+
:Constant: ``GuzzleHttp\RequestOptions::FORCE_IP_RESOLVE``
|
428 |
+
|
429 |
+
.. code-block:: php
|
430 |
+
|
431 |
+
// Force ipv4 protocol
|
432 |
+
$client->request('GET', '/foo', ['force_ip_resolve' => 'v4']);
|
433 |
+
|
434 |
+
// Force ipv6 protocol
|
435 |
+
$client->request('GET', '/foo', ['force_ip_resolve' => 'v6']);
|
436 |
+
|
437 |
+
.. note::
|
438 |
+
|
439 |
+
This setting must be supported by the HTTP handler used to send a request.
|
440 |
+
``force_ip_resolve`` is currently only supported by the built-in cURL
|
441 |
+
and stream handlers.
|
442 |
+
|
443 |
+
|
444 |
+
form_params
|
445 |
+
-----------
|
446 |
+
|
447 |
+
:Summary: Used to send an `application/x-www-form-urlencoded` POST request.
|
448 |
+
:Types: array
|
449 |
+
:Constant: ``GuzzleHttp\RequestOptions::FORM_PARAMS``
|
450 |
+
|
451 |
+
Associative array of form field names to values where each value is a string or
|
452 |
+
array of strings. Sets the Content-Type header to
|
453 |
+
application/x-www-form-urlencoded when no Content-Type header is already
|
454 |
+
present.
|
455 |
+
|
456 |
+
.. code-block:: php
|
457 |
+
|
458 |
+
$client->request('POST', '/post', [
|
459 |
+
'form_params' => [
|
460 |
+
'foo' => 'bar',
|
461 |
+
'baz' => ['hi', 'there!']
|
462 |
+
]
|
463 |
+
]);
|
464 |
+
|
465 |
+
.. note::
|
466 |
+
|
467 |
+
``form_params`` cannot be used with the ``multipart`` option. You will need to use
|
468 |
+
one or the other. Use ``form_params`` for ``application/x-www-form-urlencoded``
|
469 |
+
requests, and ``multipart`` for ``multipart/form-data`` requests.
|
470 |
+
|
471 |
+
This option cannot be used with ``body``, ``multipart``, or ``json``
|
472 |
+
|
473 |
+
|
474 |
+
headers
|
475 |
+
-------
|
476 |
+
|
477 |
+
:Summary: Associative array of headers to add to the request. Each key is the
|
478 |
+
name of a header, and each value is a string or array of strings
|
479 |
+
representing the header field values.
|
480 |
+
:Types: array
|
481 |
+
:Defaults: None
|
482 |
+
:Constant: ``GuzzleHttp\RequestOptions::HEADERS``
|
483 |
+
|
484 |
+
.. code-block:: php
|
485 |
+
|
486 |
+
// Set various headers on a request
|
487 |
+
$client->request('GET', '/get', [
|
488 |
+
'headers' => [
|
489 |
+
'User-Agent' => 'testing/1.0',
|
490 |
+
'Accept' => 'application/json',
|
491 |
+
'X-Foo' => ['Bar', 'Baz']
|
492 |
+
]
|
493 |
+
]);
|
494 |
+
|
495 |
+
Headers may be added as default options when creating a client. When headers
|
496 |
+
are used as default options, they are only applied if the request being created
|
497 |
+
does not already contain the specific header. This includes both requests passed
|
498 |
+
to the client in the ``send()`` and ``sendAsync()`` methods, and requests
|
499 |
+
created by the client (e.g., ``request()`` and ``requestAsync()``).
|
500 |
+
|
501 |
+
.. code-block:: php
|
502 |
+
|
503 |
+
$client = new GuzzleHttp\Client(['headers' => ['X-Foo' => 'Bar']]);
|
504 |
+
|
505 |
+
// Will send a request with the X-Foo header.
|
506 |
+
$client->request('GET', '/get');
|
507 |
+
|
508 |
+
// Sets the X-Foo header to "test", which prevents the default header
|
509 |
+
// from being applied.
|
510 |
+
$client->request('GET', '/get', ['headers' => ['X-Foo' => 'test']]);
|
511 |
+
|
512 |
+
// Will disable adding in default headers.
|
513 |
+
$client->request('GET', '/get', ['headers' => null]);
|
514 |
+
|
515 |
+
// Will not overwrite the X-Foo header because it is in the message.
|
516 |
+
use GuzzleHttp\Psr7\Request;
|
517 |
+
$request = new Request('GET', 'http://foo.com', ['X-Foo' => 'test']);
|
518 |
+
$client->send($request);
|
519 |
+
|
520 |
+
// Will overwrite the X-Foo header with the request option provided in the
|
521 |
+
// send method.
|
522 |
+
use GuzzleHttp\Psr7\Request;
|
523 |
+
$request = new Request('GET', 'http://foo.com', ['X-Foo' => 'test']);
|
524 |
+
$client->send($request, ['headers' => ['X-Foo' => 'overwrite']]);
|
525 |
+
|
526 |
+
|
527 |
+
.. _http-errors-option:
|
528 |
+
|
529 |
+
http_errors
|
530 |
+
-----------
|
531 |
+
|
532 |
+
:Summary: Set to ``false`` to disable throwing exceptions on an HTTP protocol
|
533 |
+
errors (i.e., 4xx and 5xx responses). Exceptions are thrown by default when
|
534 |
+
HTTP protocol errors are encountered.
|
535 |
+
:Types: bool
|
536 |
+
:Default: ``true``
|
537 |
+
:Constant: ``GuzzleHttp\RequestOptions::HTTP_ERRORS``
|
538 |
+
|
539 |
+
.. code-block:: php
|
540 |
+
|
541 |
+
$client->request('GET', '/status/500');
|
542 |
+
// Throws a GuzzleHttp\Exception\ServerException
|
543 |
+
|
544 |
+
$res = $client->request('GET', '/status/500', ['http_errors' => false]);
|
545 |
+
echo $res->getStatusCode();
|
546 |
+
// 500
|
547 |
+
|
548 |
+
.. warning::
|
549 |
+
|
550 |
+
This option only has an effect if your handler has the
|
551 |
+
``GuzzleHttp\Middleware::httpErrors`` middleware. This middleware is added
|
552 |
+
by default when a client is created with no handler, and is added by
|
553 |
+
default when creating a handler with ``GuzzleHttp\default_handler``.
|
554 |
+
|
555 |
+
|
556 |
+
idn_conversion
|
557 |
+
---
|
558 |
+
|
559 |
+
:Summary: Internationalized Domain Name (IDN) support (enabled by default if
|
560 |
+
``intl`` extension is available).
|
561 |
+
:Types:
|
562 |
+
- bool
|
563 |
+
- int
|
564 |
+
:Default: ``true`` if ``intl`` extension is available, ``false`` otherwise
|
565 |
+
:Constant: ``GuzzleHttp\RequestOptions::IDN_CONVERSION``
|
566 |
+
|
567 |
+
.. code-block:: php
|
568 |
+
|
569 |
+
$client->request('GET', 'https://яндекс.рф');
|
570 |
+
// яндекс.рф is translated to xn--d1acpjx3f.xn--p1ai before passing it to the handler
|
571 |
+
|
572 |
+
$res = $client->request('GET', 'https://яндекс.рф', ['idn_conversion' => false]);
|
573 |
+
// The domain part (яндекс.рф) stays unmodified
|
574 |
+
|
575 |
+
Enables/disables IDN support, can also be used for precise control by combining
|
576 |
+
IDNA_* constants (except IDNA_ERROR_*), see ``$options`` parameter in
|
577 |
+
`idn_to_ascii() <https://www.php.net/manual/en/function.idn-to-ascii.php>`_
|
578 |
+
documentation for more details.
|
579 |
+
|
580 |
+
|
581 |
+
json
|
582 |
+
----
|
583 |
+
|
584 |
+
:Summary: The ``json`` option is used to easily upload JSON encoded data as the
|
585 |
+
body of a request. A Content-Type header of ``application/json`` will be
|
586 |
+
added if no Content-Type header is already present on the message.
|
587 |
+
:Types:
|
588 |
+
Any PHP type that can be operated on by PHP's ``json_encode()`` function.
|
589 |
+
:Default: None
|
590 |
+
:Constant: ``GuzzleHttp\RequestOptions::JSON``
|
591 |
+
|
592 |
+
.. code-block:: php
|
593 |
+
|
594 |
+
$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]);
|
595 |
+
|
596 |
+
Here's an example of using the ``tap`` middleware to see what request is sent
|
597 |
+
over the wire.
|
598 |
+
|
599 |
+
.. code-block:: php
|
600 |
+
|
601 |
+
use GuzzleHttp\Middleware;
|
602 |
+
|
603 |
+
// Grab the client's handler instance.
|
604 |
+
$clientHandler = $client->getConfig('handler');
|
605 |
+
// Create a middleware that echoes parts of the request.
|
606 |
+
$tapMiddleware = Middleware::tap(function ($request) {
|
607 |
+
echo $request->getHeaderLine('Content-Type');
|
608 |
+
// application/json
|
609 |
+
echo $request->getBody();
|
610 |
+
// {"foo":"bar"}
|
611 |
+
});
|
612 |
+
|
613 |
+
$response = $client->request('PUT', '/put', [
|
614 |
+
'json' => ['foo' => 'bar'],
|
615 |
+
'handler' => $tapMiddleware($clientHandler)
|
616 |
+
]);
|
617 |
+
|
618 |
+
.. note::
|
619 |
+
|
620 |
+
This request option does not support customizing the Content-Type header
|
621 |
+
or any of the options from PHP's `json_encode() <http://www.php.net/manual/en/function.json-encode.php>`_
|
622 |
+
function. If you need to customize these settings, then you must pass the
|
623 |
+
JSON encoded data into the request yourself using the ``body`` request
|
624 |
+
option and you must specify the correct Content-Type header using the
|
625 |
+
``headers`` request option.
|
626 |
+
|
627 |
+
This option cannot be used with ``body``, ``form_params``, or ``multipart``
|
628 |
+
|
629 |
+
|
630 |
+
multipart
|
631 |
+
---------
|
632 |
+
|
633 |
+
:Summary: Sets the body of the request to a `multipart/form-data` form.
|
634 |
+
:Types: array
|
635 |
+
:Constant: ``GuzzleHttp\RequestOptions::MULTIPART``
|
636 |
+
|
637 |
+
The value of ``multipart`` is an array of associative arrays, each containing
|
638 |
+
the following key value pairs:
|
639 |
+
|
640 |
+
- ``name``: (string, required) the form field name
|
641 |
+
- ``contents``: (StreamInterface/resource/string, required) The data to use in
|
642 |
+
the form element.
|
643 |
+
- ``headers``: (array) Optional associative array of custom headers to use with
|
644 |
+
the form element.
|
645 |
+
- ``filename``: (string) Optional string to send as the filename in the part.
|
646 |
+
|
647 |
+
.. code-block:: php
|
648 |
+
|
649 |
+
$client->request('POST', '/post', [
|
650 |
+
'multipart' => [
|
651 |
+
[
|
652 |
+
'name' => 'foo',
|
653 |
+
'contents' => 'data',
|
654 |
+
'headers' => ['X-Baz' => 'bar']
|
655 |
+
],
|
656 |
+
[
|
657 |
+
'name' => 'baz',
|
658 |
+
'contents' => fopen('/path/to/file', 'r')
|
659 |
+
],
|
660 |
+
[
|
661 |
+
'name' => 'qux',
|
662 |
+
'contents' => fopen('/path/to/file', 'r'),
|
663 |
+
'filename' => 'custom_filename.txt'
|
664 |
+
],
|
665 |
+
]
|
666 |
+
]);
|
667 |
+
|
668 |
+
.. note::
|
669 |
+
|
670 |
+
``multipart`` cannot be used with the ``form_params`` option. You will need to
|
671 |
+
use one or the other. Use ``form_params`` for ``application/x-www-form-urlencoded``
|
672 |
+
requests, and ``multipart`` for ``multipart/form-data`` requests.
|
673 |
+
|
674 |
+
This option cannot be used with ``body``, ``form_params``, or ``json``
|
675 |
+
|
676 |
+
|
677 |
+
.. _on-headers:
|
678 |
+
|
679 |
+
on_headers
|
680 |
+
----------
|
681 |
+
|
682 |
+
:Summary: A callable that is invoked when the HTTP headers of the response have
|
683 |
+
been received but the body has not yet begun to download.
|
684 |
+
:Types: - callable
|
685 |
+
:Constant: ``GuzzleHttp\RequestOptions::ON_HEADERS``
|
686 |
+
|
687 |
+
The callable accepts a ``Psr\Http\ResponseInterface`` object. If an exception
|
688 |
+
is thrown by the callable, then the promise associated with the response will
|
689 |
+
be rejected with a ``GuzzleHttp\Exception\RequestException`` that wraps the
|
690 |
+
exception that was thrown.
|
691 |
+
|
692 |
+
You may need to know what headers and status codes were received before data
|
693 |
+
can be written to the sink.
|
694 |
+
|
695 |
+
.. code-block:: php
|
696 |
+
|
697 |
+
// Reject responses that are greater than 1024 bytes.
|
698 |
+
$client->request('GET', 'http://httpbin.org/stream/1024', [
|
699 |
+
'on_headers' => function (ResponseInterface $response) {
|
700 |
+
if ($response->getHeaderLine('Content-Length') > 1024) {
|
701 |
+
throw new \Exception('The file is too big!');
|
702 |
+
}
|
703 |
+
}
|
704 |
+
]);
|
705 |
+
|
706 |
+
.. note::
|
707 |
+
|
708 |
+
When writing HTTP handlers, the ``on_headers`` function must be invoked
|
709 |
+
before writing data to the body of the response.
|
710 |
+
|
711 |
+
|
712 |
+
.. _on_stats:
|
713 |
+
|
714 |
+
on_stats
|
715 |
+
--------
|
716 |
+
|
717 |
+
:Summary: ``on_stats`` allows you to get access to transfer statistics of a
|
718 |
+
request and access the lower level transfer details of the handler
|
719 |
+
associated with your client. ``on_stats`` is a callable that is invoked
|
720 |
+
when a handler has finished sending a request. The callback is invoked
|
721 |
+
with transfer statistics about the request, the response received, or the
|
722 |
+
error encountered. Included in the data is the total amount of time taken
|
723 |
+
to send the request.
|
724 |
+
:Types: - callable
|
725 |
+
:Constant: ``GuzzleHttp\RequestOptions::ON_STATS``
|
726 |
+
|
727 |
+
The callable accepts a ``GuzzleHttp\TransferStats`` object.
|
728 |
+
|
729 |
+
.. code-block:: php
|
730 |
+
|
731 |
+
use GuzzleHttp\TransferStats;
|
732 |
+
|
733 |
+
$client = new GuzzleHttp\Client();
|
734 |
+
|
735 |
+
$client->request('GET', 'http://httpbin.org/stream/1024', [
|
736 |
+
'on_stats' => function (TransferStats $stats) {
|
737 |
+
echo $stats->getEffectiveUri() . "\n";
|
738 |
+
echo $stats->getTransferTime() . "\n";
|
739 |
+
var_dump($stats->getHandlerStats());
|
740 |
+
|
741 |
+
// You must check if a response was received before using the
|
742 |
+
// response object.
|
743 |
+
if ($stats->hasResponse()) {
|
744 |
+
echo $stats->getResponse()->getStatusCode();
|
745 |
+
} else {
|
746 |
+
// Error data is handler specific. You will need to know what
|
747 |
+
// type of error data your handler uses before using this
|
748 |
+
// value.
|
749 |
+
var_dump($stats->getHandlerErrorData());
|
750 |
+
}
|
751 |
+
}
|
752 |
+
]);
|
753 |
+
|
754 |
+
|
755 |
+
progress
|
756 |
+
--------
|
757 |
+
|
758 |
+
:Summary: Defines a function to invoke when transfer progress is made.
|
759 |
+
:Types: - callable
|
760 |
+
:Default: None
|
761 |
+
:Constant: ``GuzzleHttp\RequestOptions::PROGRESS``
|
762 |
+
|
763 |
+
The function accepts the following positional arguments:
|
764 |
+
|
765 |
+
- the total number of bytes expected to be downloaded, zero if unknown
|
766 |
+
- the number of bytes downloaded so far
|
767 |
+
- the total number of bytes expected to be uploaded
|
768 |
+
- the number of bytes uploaded so far
|
769 |
+
|
770 |
+
.. code-block:: php
|
771 |
+
|
772 |
+
// Send a GET request to /get?foo=bar
|
773 |
+
$result = $client->request(
|
774 |
+
'GET',
|
775 |
+
'/',
|
776 |
+
[
|
777 |
+
'progress' => function(
|
778 |
+
$downloadTotal,
|
779 |
+
$downloadedBytes,
|
780 |
+
$uploadTotal,
|
781 |
+
$uploadedBytes
|
782 |
+
) {
|
783 |
+
//do something
|
784 |
+
},
|
785 |
+
]
|
786 |
+
);
|
787 |
+
|
788 |
+
|
789 |
+
.. _proxy-option:
|
790 |
+
|
791 |
+
proxy
|
792 |
+
-----
|
793 |
+
|
794 |
+
:Summary: Pass a string to specify an HTTP proxy, or an array to specify
|
795 |
+
different proxies for different protocols.
|
796 |
+
:Types:
|
797 |
+
- string
|
798 |
+
- array
|
799 |
+
:Default: None
|
800 |
+
:Constant: ``GuzzleHttp\RequestOptions::PROXY``
|
801 |
+
|
802 |
+
Pass a string to specify a proxy for all protocols.
|
803 |
+
|
804 |
+
.. code-block:: php
|
805 |
+
|
806 |
+
$client->request('GET', '/', ['proxy' => 'tcp://localhost:8125']);
|
807 |
+
|
808 |
+
Pass an associative array to specify HTTP proxies for specific URI schemes
|
809 |
+
(i.e., "http", "https"). Provide a ``no`` key value pair to provide a list of
|
810 |
+
host names that should not be proxied to.
|
811 |
+
|
812 |
+
.. note::
|
813 |
+
|
814 |
+
Guzzle will automatically populate this value with your environment's
|
815 |
+
``NO_PROXY`` environment variable. However, when providing a ``proxy``
|
816 |
+
request option, it is up to you to provide the ``no`` value parsed from
|
817 |
+
the ``NO_PROXY`` environment variable
|
818 |
+
(e.g., ``explode(',', getenv('NO_PROXY'))``).
|
819 |
+
|
820 |
+
.. code-block:: php
|
821 |
+
|
822 |
+
$client->request('GET', '/', [
|
823 |
+
'proxy' => [
|
824 |
+
'http' => 'tcp://localhost:8125', // Use this proxy with "http"
|
825 |
+
'https' => 'tcp://localhost:9124', // Use this proxy with "https",
|
826 |
+
'no' => ['.mit.edu', 'foo.com'] // Don't use a proxy with these
|
827 |
+
]
|
828 |
+
]);
|
829 |
+
|
830 |
+
.. note::
|
831 |
+
|
832 |
+
You can provide proxy URLs that contain a scheme, username, and password.
|
833 |
+
For example, ``"http://username:password@192.168.16.1:10"``.
|
834 |
+
|
835 |
+
|
836 |
+
query
|
837 |
+
-----
|
838 |
+
|
839 |
+
:Summary: Associative array of query string values or query string to add to
|
840 |
+
the request.
|
841 |
+
:Types:
|
842 |
+
- array
|
843 |
+
- string
|
844 |
+
:Default: None
|
845 |
+
:Constant: ``GuzzleHttp\RequestOptions::QUERY``
|
846 |
+
|
847 |
+
.. code-block:: php
|
848 |
+
|
849 |
+
// Send a GET request to /get?foo=bar
|
850 |
+
$client->request('GET', '/get', ['query' => ['foo' => 'bar']]);
|
851 |
+
|
852 |
+
Query strings specified in the ``query`` option will overwrite all query string
|
853 |
+
values supplied in the URI of a request.
|
854 |
+
|
855 |
+
.. code-block:: php
|
856 |
+
|
857 |
+
// Send a GET request to /get?foo=bar
|
858 |
+
$client->request('GET', '/get?abc=123', ['query' => ['foo' => 'bar']]);
|
859 |
+
|
860 |
+
read_timeout
|
861 |
+
------------
|
862 |
+
|
863 |
+
:Summary: Float describing the timeout to use when reading a streamed body
|
864 |
+
:Types: float
|
865 |
+
:Default: Defaults to the value of the ``default_socket_timeout`` PHP ini setting
|
866 |
+
:Constant: ``GuzzleHttp\RequestOptions::READ_TIMEOUT``
|
867 |
+
|
868 |
+
The timeout applies to individual read operations on a streamed body (when the ``stream`` option is enabled).
|
869 |
+
|
870 |
+
.. code-block:: php
|
871 |
+
|
872 |
+
$response = $client->request('GET', '/stream', [
|
873 |
+
'stream' => true,
|
874 |
+
'read_timeout' => 10,
|
875 |
+
]);
|
876 |
+
|
877 |
+
$body = $response->getBody();
|
878 |
+
|
879 |
+
// Returns false on timeout
|
880 |
+
$data = $body->read(1024);
|
881 |
+
|
882 |
+
// Returns false on timeout
|
883 |
+
$line = fgets($body->detach());
|
884 |
+
|
885 |
+
.. _sink-option:
|
886 |
+
|
887 |
+
sink
|
888 |
+
----
|
889 |
+
|
890 |
+
:Summary: Specify where the body of a response will be saved.
|
891 |
+
:Types:
|
892 |
+
- string (path to file on disk)
|
893 |
+
- ``fopen()`` resource
|
894 |
+
- ``Psr\Http\Message\StreamInterface``
|
895 |
+
|
896 |
+
:Default: PHP temp stream
|
897 |
+
:Constant: ``GuzzleHttp\RequestOptions::SINK``
|
898 |
+
|
899 |
+
Pass a string to specify the path to a file that will store the contents of the
|
900 |
+
response body:
|
901 |
+
|
902 |
+
.. code-block:: php
|
903 |
+
|
904 |
+
$client->request('GET', '/stream/20', ['sink' => '/path/to/file']);
|
905 |
+
|
906 |
+
Pass a resource returned from ``fopen()`` to write the response to a PHP stream:
|
907 |
+
|
908 |
+
.. code-block:: php
|
909 |
+
|
910 |
+
$resource = fopen('/path/to/file', 'w');
|
911 |
+
$client->request('GET', '/stream/20', ['sink' => $resource]);
|
912 |
+
|
913 |
+
Pass a ``Psr\Http\Message\StreamInterface`` object to stream the response
|
914 |
+
body to an open PSR-7 stream.
|
915 |
+
|
916 |
+
.. code-block:: php
|
917 |
+
|
918 |
+
$resource = fopen('/path/to/file', 'w');
|
919 |
+
$stream = GuzzleHttp\Psr7\stream_for($resource);
|
920 |
+
$client->request('GET', '/stream/20', ['save_to' => $stream]);
|
921 |
+
|
922 |
+
.. note::
|
923 |
+
|
924 |
+
The ``save_to`` request option has been deprecated in favor of the
|
925 |
+
``sink`` request option. Providing the ``save_to`` option is now an alias
|
926 |
+
of ``sink``.
|
927 |
+
|
928 |
+
|
929 |
+
.. _ssl_key-option:
|
930 |
+
|
931 |
+
ssl_key
|
932 |
+
-------
|
933 |
+
|
934 |
+
:Summary: Specify the path to a file containing a private SSL key in PEM
|
935 |
+
format. If a password is required, then set to an array containing the path
|
936 |
+
to the SSL key in the first array element followed by the password required
|
937 |
+
for the certificate in the second element.
|
938 |
+
:Types:
|
939 |
+
- string
|
940 |
+
- array
|
941 |
+
:Default: None
|
942 |
+
:Constant: ``GuzzleHttp\RequestOptions::SSL_KEY``
|
943 |
+
|
944 |
+
.. note::
|
945 |
+
|
946 |
+
``ssl_key`` is implemented by HTTP handlers. This is currently only
|
947 |
+
supported by the cURL handler, but might be supported by other third-part
|
948 |
+
handlers.
|
949 |
+
|
950 |
+
|
951 |
+
.. _stream-option:
|
952 |
+
|
953 |
+
stream
|
954 |
+
------
|
955 |
+
|
956 |
+
:Summary: Set to ``true`` to stream a response rather than download it all
|
957 |
+
up-front.
|
958 |
+
:Types: bool
|
959 |
+
:Default: ``false``
|
960 |
+
:Constant: ``GuzzleHttp\RequestOptions::STREAM``
|
961 |
+
|
962 |
+
.. code-block:: php
|
963 |
+
|
964 |
+
$response = $client->request('GET', '/stream/20', ['stream' => true]);
|
965 |
+
// Read bytes off of the stream until the end of the stream is reached
|
966 |
+
$body = $response->getBody();
|
967 |
+
while (!$body->eof()) {
|
968 |
+
echo $body->read(1024);
|
969 |
+
}
|
970 |
+
|
971 |
+
.. note::
|
972 |
+
|
973 |
+
Streaming response support must be implemented by the HTTP handler used by
|
974 |
+
a client. This option might not be supported by every HTTP handler, but the
|
975 |
+
interface of the response object remains the same regardless of whether or
|
976 |
+
not it is supported by the handler.
|
977 |
+
|
978 |
+
|
979 |
+
synchronous
|
980 |
+
-----------
|
981 |
+
|
982 |
+
:Summary: Set to true to inform HTTP handlers that you intend on waiting on the
|
983 |
+
response. This can be useful for optimizations.
|
984 |
+
:Types: bool
|
985 |
+
:Default: none
|
986 |
+
:Constant: ``GuzzleHttp\RequestOptions::SYNCHRONOUS``
|
987 |
+
|
988 |
+
|
989 |
+
.. _verify-option:
|
990 |
+
|
991 |
+
verify
|
992 |
+
------
|
993 |
+
|
994 |
+
:Summary: Describes the SSL certificate verification behavior of a request.
|
995 |
+
|
996 |
+
- Set to ``true`` to enable SSL certificate verification and use the default
|
997 |
+
CA bundle provided by operating system.
|
998 |
+
- Set to ``false`` to disable certificate verification (this is insecure!).
|
999 |
+
- Set to a string to provide the path to a CA bundle to enable verification
|
1000 |
+
using a custom certificate.
|
1001 |
+
:Types:
|
1002 |
+
- bool
|
1003 |
+
- string
|
1004 |
+
:Default: ``true``
|
1005 |
+
:Constant: ``GuzzleHttp\RequestOptions::VERIFY``
|
1006 |
+
|
1007 |
+
.. code-block:: php
|
1008 |
+
|
1009 |
+
// Use the system's CA bundle (this is the default setting)
|
1010 |
+
$client->request('GET', '/', ['verify' => true]);
|
1011 |
+
|
1012 |
+
// Use a custom SSL certificate on disk.
|
1013 |
+
$client->request('GET', '/', ['verify' => '/path/to/cert.pem']);
|
1014 |
+
|
1015 |
+
// Disable validation entirely (don't do this!).
|
1016 |
+
$client->request('GET', '/', ['verify' => false]);
|
1017 |
+
|
1018 |
+
Not all system's have a known CA bundle on disk. For example, Windows and
|
1019 |
+
OS X do not have a single common location for CA bundles. When setting
|
1020 |
+
"verify" to ``true``, Guzzle will do its best to find the most appropriate
|
1021 |
+
CA bundle on your system. When using cURL or the PHP stream wrapper on PHP
|
1022 |
+
versions >= 5.6, this happens by default. When using the PHP stream
|
1023 |
+
wrapper on versions < 5.6, Guzzle tries to find your CA bundle in the
|
1024 |
+
following order:
|
1025 |
+
|
1026 |
+
1. Check if ``openssl.cafile`` is set in your php.ini file.
|
1027 |
+
2. Check if ``curl.cainfo`` is set in your php.ini file.
|
1028 |
+
3. Check if ``/etc/pki/tls/certs/ca-bundle.crt`` exists (Red Hat, CentOS,
|
1029 |
+
Fedora; provided by the ca-certificates package)
|
1030 |
+
4. Check if ``/etc/ssl/certs/ca-certificates.crt`` exists (Ubuntu, Debian;
|
1031 |
+
provided by the ca-certificates package)
|
1032 |
+
5. Check if ``/usr/local/share/certs/ca-root-nss.crt`` exists (FreeBSD;
|
1033 |
+
provided by the ca_root_nss package)
|
1034 |
+
6. Check if ``/usr/local/etc/openssl/cert.pem`` (OS X; provided by homebrew)
|
1035 |
+
7. Check if ``C:\windows\system32\curl-ca-bundle.crt`` exists (Windows)
|
1036 |
+
8. Check if ``C:\windows\curl-ca-bundle.crt`` exists (Windows)
|
1037 |
+
|
1038 |
+
The result of this lookup is cached in memory so that subsequent calls
|
1039 |
+
in the same process will return very quickly. However, when sending only
|
1040 |
+
a single request per-process in something like Apache, you should consider
|
1041 |
+
setting the ``openssl.cafile`` environment variable to the path on disk
|
1042 |
+
to the file so that this entire process is skipped.
|
1043 |
+
|
1044 |
+
If you do not need a specific certificate bundle, then Mozilla provides a
|
1045 |
+
commonly used CA bundle which can be downloaded
|
1046 |
+
`here <https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt>`_
|
1047 |
+
(provided by the maintainer of cURL). Once you have a CA bundle available on
|
1048 |
+
disk, you can set the "openssl.cafile" PHP ini setting to point to the path to
|
1049 |
+
the file, allowing you to omit the "verify" request option. Much more detail on
|
1050 |
+
SSL certificates can be found on the
|
1051 |
+
`cURL website <http://curl.haxx.se/docs/sslcerts.html>`_.
|
1052 |
+
|
1053 |
+
|
1054 |
+
.. _timeout-option:
|
1055 |
+
|
1056 |
+
timeout
|
1057 |
+
-------
|
1058 |
+
|
1059 |
+
:Summary: Float describing the timeout of the request in seconds. Use ``0``
|
1060 |
+
to wait indefinitely (the default behavior).
|
1061 |
+
:Types: float
|
1062 |
+
:Default: ``0``
|
1063 |
+
:Constant: ``GuzzleHttp\RequestOptions::TIMEOUT``
|
1064 |
+
|
1065 |
+
.. code-block:: php
|
1066 |
+
|
1067 |
+
// Timeout if a server does not return a response in 3.14 seconds.
|
1068 |
+
$client->request('GET', '/delay/5', ['timeout' => 3.14]);
|
1069 |
+
// PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException'
|
1070 |
+
|
1071 |
+
|
1072 |
+
.. _version-option:
|
1073 |
+
|
1074 |
+
version
|
1075 |
+
-------
|
1076 |
+
|
1077 |
+
:Summary: Protocol version to use with the request.
|
1078 |
+
:Types: string, float
|
1079 |
+
:Default: ``1.1``
|
1080 |
+
:Constant: ``GuzzleHttp\RequestOptions::VERSION``
|
1081 |
+
|
1082 |
+
.. code-block:: php
|
1083 |
+
|
1084 |
+
// Force HTTP/1.0
|
1085 |
+
$request = $client->request('GET', '/get', ['version' => 1.0]);
|
vendor/guzzlehttp/guzzle/docs/requirements.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
Sphinx>=1.3.0,<1.4.0
|
2 |
+
guzzle_sphinx_theme>=0.7.0,<0.8.0
|
vendor/guzzlehttp/guzzle/docs/testing.rst
ADDED
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
======================
|
2 |
+
Testing Guzzle Clients
|
3 |
+
======================
|
4 |
+
|
5 |
+
Guzzle provides several tools that will enable you to easily mock the HTTP
|
6 |
+
layer without needing to send requests over the internet.
|
7 |
+
|
8 |
+
* Mock handler
|
9 |
+
* History middleware
|
10 |
+
* Node.js web server for integration testing
|
11 |
+
|
12 |
+
|
13 |
+
Mock Handler
|
14 |
+
============
|
15 |
+
|
16 |
+
When testing HTTP clients, you often need to simulate specific scenarios like
|
17 |
+
returning a successful response, returning an error, or returning specific
|
18 |
+
responses in a certain order. Because unit tests need to be predictable, easy
|
19 |
+
to bootstrap, and fast, hitting an actual remote API is a test smell.
|
20 |
+
|
21 |
+
Guzzle provides a mock handler that can be used to fulfill HTTP requests with
|
22 |
+
a response or exception by shifting return values off of a queue.
|
23 |
+
|
24 |
+
.. code-block:: php
|
25 |
+
|
26 |
+
use GuzzleHttp\Client;
|
27 |
+
use GuzzleHttp\Handler\MockHandler;
|
28 |
+
use GuzzleHttp\HandlerStack;
|
29 |
+
use GuzzleHttp\Psr7\Response;
|
30 |
+
use GuzzleHttp\Psr7\Request;
|
31 |
+
use GuzzleHttp\Exception\RequestException;
|
32 |
+
|
33 |
+
// Create a mock and queue two responses.
|
34 |
+
$mock = new MockHandler([
|
35 |
+
new Response(200, ['X-Foo' => 'Bar'], 'Hello, World'),
|
36 |
+
new Response(202, ['Content-Length' => 0]),
|
37 |
+
new RequestException('Error Communicating with Server', new Request('GET', 'test'))
|
38 |
+
]);
|
39 |
+
|
40 |
+
$handlerStack = HandlerStack::create($mock);
|
41 |
+
$client = new Client(['handler' => $handlerStack]);
|
42 |
+
|
43 |
+
// The first request is intercepted with the first response.
|
44 |
+
$response = $client->request('GET', '/');
|
45 |
+
echo $response->getStatusCode();
|
46 |
+
//> 200
|
47 |
+
echo $response->getBody();
|
48 |
+
//> Hello, World
|
49 |
+
// The second request is intercepted with the second response.
|
50 |
+
echo $client->request('GET', '/')->getStatusCode();
|
51 |
+
//> 202
|
52 |
+
|
53 |
+
// Reset the queue and queue up a new response
|
54 |
+
$mock->reset();
|
55 |
+
$mock->append(new Response(201));
|
56 |
+
|
57 |
+
// As the mock was reset, the new response is the 201 CREATED,
|
58 |
+
// instead of the previously queued RequestException
|
59 |
+
echo $client->request('GET', '/')->getStatusCode();
|
60 |
+
//> 201
|
61 |
+
|
62 |
+
|
63 |
+
When no more responses are in the queue and a request is sent, an
|
64 |
+
``OutOfBoundsException`` is thrown.
|
65 |
+
|
66 |
+
History Middleware
|
67 |
+
==================
|
68 |
+
|
69 |
+
When using things like the ``Mock`` handler, you often need to know if the
|
70 |
+
requests you expected to send were sent exactly as you intended. While the mock
|
71 |
+
handler responds with mocked responses, the history middleware maintains a
|
72 |
+
history of the requests that were sent by a client.
|
73 |
+
|
74 |
+
.. code-block:: php
|
75 |
+
|
76 |
+
use GuzzleHttp\Client;
|
77 |
+
use GuzzleHttp\HandlerStack;
|
78 |
+
use GuzzleHttp\Middleware;
|
79 |
+
|
80 |
+
$container = [];
|
81 |
+
$history = Middleware::history($container);
|
82 |
+
|
83 |
+
$handlerStack = HandlerStack::create();
|
84 |
+
// or $handlerStack = HandlerStack::create($mock); if using the Mock handler.
|
85 |
+
|
86 |
+
// Add the history middleware to the handler stack.
|
87 |
+
$handlerStack->push($history);
|
88 |
+
|
89 |
+
$client = new Client(['handler' => $handlerStack]);
|
90 |
+
|
91 |
+
$client->request('GET', 'http://httpbin.org/get');
|
92 |
+
$client->request('HEAD', 'http://httpbin.org/get');
|
93 |
+
|
94 |
+
// Count the number of transactions
|
95 |
+
echo count($container);
|
96 |
+
//> 2
|
97 |
+
|
98 |
+
// Iterate over the requests and responses
|
99 |
+
foreach ($container as $transaction) {
|
100 |
+
echo $transaction['request']->getMethod();
|
101 |
+
//> GET, HEAD
|
102 |
+
if ($transaction['response']) {
|
103 |
+
echo $transaction['response']->getStatusCode();
|
104 |
+
//> 200, 200
|
105 |
+
} elseif ($transaction['error']) {
|
106 |
+
echo $transaction['error'];
|
107 |
+
//> exception
|
108 |
+
}
|
109 |
+
var_dump($transaction['options']);
|
110 |
+
//> dumps the request options of the sent request.
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
Test Web Server
|
115 |
+
===============
|
116 |
+
|
117 |
+
Using mock responses is almost always enough when testing a web service client.
|
118 |
+
When implementing custom :doc:`HTTP handlers <handlers-and-middleware>`, you'll
|
119 |
+
need to send actual HTTP requests in order to sufficiently test the handler.
|
120 |
+
However, a best practice is to contact a local web server rather than a server
|
121 |
+
over the internet.
|
122 |
+
|
123 |
+
- Tests are more reliable
|
124 |
+
- Tests do not require a network connection
|
125 |
+
- Tests have no external dependencies
|
126 |
+
|
127 |
+
|
128 |
+
Using the test server
|
129 |
+
---------------------
|
130 |
+
|
131 |
+
.. warning::
|
132 |
+
|
133 |
+
The following functionality is provided to help developers of Guzzle
|
134 |
+
develop HTTP handlers. There is no promise of backwards compatibility
|
135 |
+
when it comes to the node.js test server or the ``GuzzleHttp\Tests\Server``
|
136 |
+
class. If you are using the test server or ``Server`` class outside of
|
137 |
+
guzzlehttp/guzzle, then you will need to configure autoloading and
|
138 |
+
ensure the web server is started manually.
|
139 |
+
|
140 |
+
.. hint::
|
141 |
+
|
142 |
+
You almost never need to use this test web server. You should only ever
|
143 |
+
consider using it when developing HTTP handlers. The test web server
|
144 |
+
is not necessary for mocking requests. For that, please use the
|
145 |
+
Mock handler and history middleware.
|
146 |
+
|
147 |
+
Guzzle ships with a node.js test server that receives requests and returns
|
148 |
+
responses from a queue. The test server exposes a simple API that is used to
|
149 |
+
enqueue responses and inspect the requests that it has received.
|
150 |
+
|
151 |
+
Any operation on the ``Server`` object will ensure that
|
152 |
+
the server is running and wait until it is able to receive requests before
|
153 |
+
returning.
|
154 |
+
|
155 |
+
``GuzzleHttp\Tests\Server`` provides a static interface to the test server. You
|
156 |
+
can queue an HTTP response or an array of responses by calling
|
157 |
+
``Server::enqueue()``. This method accepts an array of
|
158 |
+
``Psr\Http\Message\ResponseInterface`` and ``Exception`` objects.
|
159 |
+
|
160 |
+
.. code-block:: php
|
161 |
+
|
162 |
+
use GuzzleHttp\Client;
|
163 |
+
use GuzzleHttp\Psr7\Response;
|
164 |
+
use GuzzleHttp\Tests\Server;
|
165 |
+
|
166 |
+
// Start the server and queue a response
|
167 |
+
Server::enqueue([
|
168 |
+
new Response(200, ['Content-Length' => 0])
|
169 |
+
]);
|
170 |
+
|
171 |
+
$client = new Client(['base_uri' => Server::$url]);
|
172 |
+
echo $client->request('GET', '/foo')->getStatusCode();
|
173 |
+
// 200
|
174 |
+
|
175 |
+
When a response is queued on the test server, the test server will remove any
|
176 |
+
previously queued responses. As the server receives requests, queued responses
|
177 |
+
are dequeued and returned to the request. When the queue is empty, the server
|
178 |
+
will return a 500 response.
|
179 |
+
|
180 |
+
You can inspect the requests that the server has retrieved by calling
|
181 |
+
``Server::received()``.
|
182 |
+
|
183 |
+
.. code-block:: php
|
184 |
+
|
185 |
+
foreach (Server::received() as $response) {
|
186 |
+
echo $response->getStatusCode();
|
187 |
+
}
|
188 |
+
|
189 |
+
You can clear the list of received requests from the web server using the
|
190 |
+
``Server::flush()`` method.
|
191 |
+
|
192 |
+
.. code-block:: php
|
193 |
+
|
194 |
+
Server::flush();
|
195 |
+
echo count(Server::received());
|
196 |
+
// 0
|
vendor/guzzlehttp/guzzle/phpstan-baseline.neon
ADDED
@@ -0,0 +1,1412 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
parameters:
|
2 |
+
ignoreErrors:
|
3 |
+
-
|
4 |
+
message: "#^Property GuzzleHttp\\\\Client\\:\\:\\$config type has no value type specified in iterable type array\\.$#"
|
5 |
+
count: 1
|
6 |
+
path: src/Client.php
|
7 |
+
|
8 |
+
-
|
9 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:__construct\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#"
|
10 |
+
count: 1
|
11 |
+
path: src/Client.php
|
12 |
+
|
13 |
+
-
|
14 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:__call\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#"
|
15 |
+
count: 1
|
16 |
+
path: src/Client.php
|
17 |
+
|
18 |
+
-
|
19 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:__call\\(\\) should return GuzzleHttp\\\\Promise\\\\PromiseInterface but returns GuzzleHttp\\\\PromiseInterface\\|Psr\\\\Http\\\\Message\\\\ResponseInterface\\.$#"
|
20 |
+
count: 1
|
21 |
+
path: src/Client.php
|
22 |
+
|
23 |
+
-
|
24 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:sendAsync\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
25 |
+
count: 1
|
26 |
+
path: src/Client.php
|
27 |
+
|
28 |
+
-
|
29 |
+
message: "#^Return typehint of method GuzzleHttp\\\\Client\\:\\:sendAsync\\(\\) has invalid type GuzzleHttp\\\\PromiseInterface\\.$#"
|
30 |
+
count: 1
|
31 |
+
path: src/Client.php
|
32 |
+
|
33 |
+
-
|
34 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:sendAsync\\(\\) should return GuzzleHttp\\\\PromiseInterface but returns GuzzleHttp\\\\Promise\\\\PromiseInterface\\.$#"
|
35 |
+
count: 1
|
36 |
+
path: src/Client.php
|
37 |
+
|
38 |
+
-
|
39 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:send\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
40 |
+
count: 1
|
41 |
+
path: src/Client.php
|
42 |
+
|
43 |
+
-
|
44 |
+
message: "#^PHPDoc tag @throws with type GuzzleHttp\\\\GuzzleException is not subtype of Throwable$#"
|
45 |
+
count: 2
|
46 |
+
path: src/Client.php
|
47 |
+
|
48 |
+
-
|
49 |
+
message: "#^Call to method wait\\(\\) on an unknown class GuzzleHttp\\\\PromiseInterface\\.$#"
|
50 |
+
count: 2
|
51 |
+
path: src/Client.php
|
52 |
+
|
53 |
+
-
|
54 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:requestAsync\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
55 |
+
count: 1
|
56 |
+
path: src/Client.php
|
57 |
+
|
58 |
+
-
|
59 |
+
message: "#^Return typehint of method GuzzleHttp\\\\Client\\:\\:requestAsync\\(\\) has invalid type GuzzleHttp\\\\PromiseInterface\\.$#"
|
60 |
+
count: 1
|
61 |
+
path: src/Client.php
|
62 |
+
|
63 |
+
-
|
64 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:requestAsync\\(\\) should return GuzzleHttp\\\\PromiseInterface but returns GuzzleHttp\\\\Promise\\\\PromiseInterface\\.$#"
|
65 |
+
count: 1
|
66 |
+
path: src/Client.php
|
67 |
+
|
68 |
+
-
|
69 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:request\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
70 |
+
count: 1
|
71 |
+
path: src/Client.php
|
72 |
+
|
73 |
+
-
|
74 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:buildUri\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#"
|
75 |
+
count: 1
|
76 |
+
path: src/Client.php
|
77 |
+
|
78 |
+
-
|
79 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:configureDefaults\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#"
|
80 |
+
count: 1
|
81 |
+
path: src/Client.php
|
82 |
+
|
83 |
+
-
|
84 |
+
message: "#^Parameter \\#1 \\$str of function strtolower expects string, int\\|string given\\.$#"
|
85 |
+
count: 1
|
86 |
+
path: src/Client.php
|
87 |
+
|
88 |
+
-
|
89 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:prepareDefaults\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
90 |
+
count: 1
|
91 |
+
path: src/Client.php
|
92 |
+
|
93 |
+
-
|
94 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:prepareDefaults\\(\\) return type has no value type specified in iterable type array\\.$#"
|
95 |
+
count: 1
|
96 |
+
path: src/Client.php
|
97 |
+
|
98 |
+
-
|
99 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:transfer\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
100 |
+
count: 1
|
101 |
+
path: src/Client.php
|
102 |
+
|
103 |
+
-
|
104 |
+
message: "#^Method GuzzleHttp\\\\Client\\:\\:applyOptions\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
105 |
+
count: 1
|
106 |
+
path: src/Client.php
|
107 |
+
|
108 |
+
-
|
109 |
+
message: "#^Parameter \\#2 \\$prefix of function http_build_query expects string, null given\\.$#"
|
110 |
+
count: 1
|
111 |
+
path: src/Client.php
|
112 |
+
|
113 |
+
-
|
114 |
+
message: "#^Method GuzzleHttp\\\\ClientInterface\\:\\:send\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
115 |
+
count: 1
|
116 |
+
path: src/ClientInterface.php
|
117 |
+
|
118 |
+
-
|
119 |
+
message: "#^Method GuzzleHttp\\\\ClientInterface\\:\\:sendAsync\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
120 |
+
count: 1
|
121 |
+
path: src/ClientInterface.php
|
122 |
+
|
123 |
+
-
|
124 |
+
message: "#^Method GuzzleHttp\\\\ClientInterface\\:\\:request\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
125 |
+
count: 1
|
126 |
+
path: src/ClientInterface.php
|
127 |
+
|
128 |
+
-
|
129 |
+
message: "#^Method GuzzleHttp\\\\ClientInterface\\:\\:requestAsync\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
130 |
+
count: 1
|
131 |
+
path: src/ClientInterface.php
|
132 |
+
|
133 |
+
-
|
134 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:__construct\\(\\) has parameter \\$cookieArray with no value type specified in iterable type array\\.$#"
|
135 |
+
count: 1
|
136 |
+
path: src/Cookie/CookieJar.php
|
137 |
+
|
138 |
+
-
|
139 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:fromArray\\(\\) has parameter \\$cookies with no value type specified in iterable type array\\.$#"
|
140 |
+
count: 1
|
141 |
+
path: src/Cookie/CookieJar.php
|
142 |
+
|
143 |
+
-
|
144 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:fromArray\\(\\) return type has no value type specified in iterable type GuzzleHttp\\\\Cookie\\\\CookieJar\\.$#"
|
145 |
+
count: 1
|
146 |
+
path: src/Cookie/CookieJar.php
|
147 |
+
|
148 |
+
-
|
149 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:getCookieValue\\(\\) has no return typehint specified\\.$#"
|
150 |
+
count: 1
|
151 |
+
path: src/Cookie/CookieJar.php
|
152 |
+
|
153 |
+
-
|
154 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:getCookieValue\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
155 |
+
count: 1
|
156 |
+
path: src/Cookie/CookieJar.php
|
157 |
+
|
158 |
+
-
|
159 |
+
message: "#^Result of \\|\\| is always false\\.$#"
|
160 |
+
count: 1
|
161 |
+
path: src/Cookie/CookieJar.php
|
162 |
+
|
163 |
+
-
|
164 |
+
message: "#^Strict comparison using \\=\\=\\= between string and null will always evaluate to false\\.$#"
|
165 |
+
count: 2
|
166 |
+
path: src/Cookie/CookieJar.php
|
167 |
+
|
168 |
+
-
|
169 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:toArray\\(\\) return type has no value type specified in iterable type array\\.$#"
|
170 |
+
count: 1
|
171 |
+
path: src/Cookie/CookieJar.php
|
172 |
+
|
173 |
+
-
|
174 |
+
message: "#^Call to an undefined method Traversable\\<mixed, mixed\\>\\:\\:getArrayCopy\\(\\)\\.$#"
|
175 |
+
count: 1
|
176 |
+
path: src/Cookie/CookieJar.php
|
177 |
+
|
178 |
+
-
|
179 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:clear\\(\\) return type has no value type specified in iterable type GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\.$#"
|
180 |
+
count: 1
|
181 |
+
path: src/Cookie/CookieJar.php
|
182 |
+
|
183 |
+
-
|
184 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:clear\\(\\) should return GuzzleHttp\\\\Cookie\\\\CookieJarInterface but return statement is missing\\.$#"
|
185 |
+
count: 1
|
186 |
+
path: src/Cookie/CookieJar.php
|
187 |
+
|
188 |
+
-
|
189 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:clear\\(\\) should return GuzzleHttp\\\\Cookie\\\\CookieJarInterface but empty return statement found\\.$#"
|
190 |
+
count: 1
|
191 |
+
path: src/Cookie/CookieJar.php
|
192 |
+
|
193 |
+
-
|
194 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:clearSessionCookies\\(\\) has no return typehint specified\\.$#"
|
195 |
+
count: 1
|
196 |
+
path: src/Cookie/CookieJar.php
|
197 |
+
|
198 |
+
-
|
199 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:count\\(\\) has no return typehint specified\\.$#"
|
200 |
+
count: 1
|
201 |
+
path: src/Cookie/CookieJar.php
|
202 |
+
|
203 |
+
-
|
204 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:getIterator\\(\\) return type has no value type specified in iterable type Traversable\\<mixed, mixed\\>\\.$#"
|
205 |
+
count: 1
|
206 |
+
path: src/Cookie/CookieJar.php
|
207 |
+
|
208 |
+
-
|
209 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:extractCookies\\(\\) has no return typehint specified\\.$#"
|
210 |
+
count: 1
|
211 |
+
path: src/Cookie/CookieJar.php
|
212 |
+
|
213 |
+
-
|
214 |
+
message: "#^Parameter \\#3 \\$length of function substr expects int, int\\|false given\\.$#"
|
215 |
+
count: 1
|
216 |
+
path: src/Cookie/CookieJar.php
|
217 |
+
|
218 |
+
-
|
219 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJar\\:\\:removeCookieIfEmpty\\(\\) has no return typehint specified\\.$#"
|
220 |
+
count: 1
|
221 |
+
path: src/Cookie/CookieJar.php
|
222 |
+
|
223 |
+
-
|
224 |
+
message: "#^Interface GuzzleHttp\\\\Cookie\\\\CookieJarInterface extends generic interface IteratorAggregate but does not specify its types\\: TKey, TValue$#"
|
225 |
+
count: 1
|
226 |
+
path: src/Cookie/CookieJarInterface.php
|
227 |
+
|
228 |
+
-
|
229 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\:\\:extractCookies\\(\\) has no return typehint specified\\.$#"
|
230 |
+
count: 1
|
231 |
+
path: src/Cookie/CookieJarInterface.php
|
232 |
+
|
233 |
+
-
|
234 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\:\\:clear\\(\\) return type has no value type specified in iterable type GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\.$#"
|
235 |
+
count: 1
|
236 |
+
path: src/Cookie/CookieJarInterface.php
|
237 |
+
|
238 |
+
-
|
239 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\:\\:clearSessionCookies\\(\\) has no return typehint specified\\.$#"
|
240 |
+
count: 1
|
241 |
+
path: src/Cookie/CookieJarInterface.php
|
242 |
+
|
243 |
+
-
|
244 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\CookieJarInterface\\:\\:toArray\\(\\) return type has no value type specified in iterable type array\\.$#"
|
245 |
+
count: 1
|
246 |
+
path: src/Cookie/CookieJarInterface.php
|
247 |
+
|
248 |
+
-
|
249 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\FileCookieJar\\:\\:save\\(\\) has no return typehint specified\\.$#"
|
250 |
+
count: 1
|
251 |
+
path: src/Cookie/FileCookieJar.php
|
252 |
+
|
253 |
+
-
|
254 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\FileCookieJar\\:\\:load\\(\\) has no return typehint specified\\.$#"
|
255 |
+
count: 1
|
256 |
+
path: src/Cookie/FileCookieJar.php
|
257 |
+
|
258 |
+
-
|
259 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SessionCookieJar\\:\\:save\\(\\) has no return typehint specified\\.$#"
|
260 |
+
count: 1
|
261 |
+
path: src/Cookie/SessionCookieJar.php
|
262 |
+
|
263 |
+
-
|
264 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SessionCookieJar\\:\\:load\\(\\) has no return typehint specified\\.$#"
|
265 |
+
count: 1
|
266 |
+
path: src/Cookie/SessionCookieJar.php
|
267 |
+
|
268 |
+
-
|
269 |
+
message: "#^Property GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:\\$defaults type has no value type specified in iterable type array\\.$#"
|
270 |
+
count: 1
|
271 |
+
path: src/Cookie/SetCookie.php
|
272 |
+
|
273 |
+
-
|
274 |
+
message: "#^Property GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:\\$data type has no value type specified in iterable type array\\.$#"
|
275 |
+
count: 1
|
276 |
+
path: src/Cookie/SetCookie.php
|
277 |
+
|
278 |
+
-
|
279 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#"
|
280 |
+
count: 1
|
281 |
+
path: src/Cookie/SetCookie.php
|
282 |
+
|
283 |
+
-
|
284 |
+
message: "#^Property GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:\\$data \\(array\\) does not accept array\\|null\\.$#"
|
285 |
+
count: 1
|
286 |
+
path: src/Cookie/SetCookie.php
|
287 |
+
|
288 |
+
-
|
289 |
+
message: "#^Parameter \\#1 \\$timestamp of method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setExpires\\(\\) expects int, mixed given\\.$#"
|
290 |
+
count: 1
|
291 |
+
path: src/Cookie/SetCookie.php
|
292 |
+
|
293 |
+
-
|
294 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:toArray\\(\\) has no return typehint specified\\.$#"
|
295 |
+
count: 1
|
296 |
+
path: src/Cookie/SetCookie.php
|
297 |
+
|
298 |
+
-
|
299 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setName\\(\\) has no return typehint specified\\.$#"
|
300 |
+
count: 1
|
301 |
+
path: src/Cookie/SetCookie.php
|
302 |
+
|
303 |
+
-
|
304 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setValue\\(\\) has no return typehint specified\\.$#"
|
305 |
+
count: 1
|
306 |
+
path: src/Cookie/SetCookie.php
|
307 |
+
|
308 |
+
-
|
309 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setDomain\\(\\) has no return typehint specified\\.$#"
|
310 |
+
count: 1
|
311 |
+
path: src/Cookie/SetCookie.php
|
312 |
+
|
313 |
+
-
|
314 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setPath\\(\\) has no return typehint specified\\.$#"
|
315 |
+
count: 1
|
316 |
+
path: src/Cookie/SetCookie.php
|
317 |
+
|
318 |
+
-
|
319 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setMaxAge\\(\\) has no return typehint specified\\.$#"
|
320 |
+
count: 1
|
321 |
+
path: src/Cookie/SetCookie.php
|
322 |
+
|
323 |
+
-
|
324 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setExpires\\(\\) has no return typehint specified\\.$#"
|
325 |
+
count: 1
|
326 |
+
path: src/Cookie/SetCookie.php
|
327 |
+
|
328 |
+
-
|
329 |
+
message: "#^Else branch is unreachable because ternary operator condition is always true\\.$#"
|
330 |
+
count: 1
|
331 |
+
path: src/Cookie/SetCookie.php
|
332 |
+
|
333 |
+
-
|
334 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setSecure\\(\\) has no return typehint specified\\.$#"
|
335 |
+
count: 1
|
336 |
+
path: src/Cookie/SetCookie.php
|
337 |
+
|
338 |
+
-
|
339 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setDiscard\\(\\) has no return typehint specified\\.$#"
|
340 |
+
count: 1
|
341 |
+
path: src/Cookie/SetCookie.php
|
342 |
+
|
343 |
+
-
|
344 |
+
message: "#^Method GuzzleHttp\\\\Cookie\\\\SetCookie\\:\\:setHttpOnly\\(\\) has no return typehint specified\\.$#"
|
345 |
+
count: 1
|
346 |
+
path: src/Cookie/SetCookie.php
|
347 |
+
|
348 |
+
-
|
349 |
+
message: "#^Parameter \\#1 \\$str of function ltrim expects string, string\\|null given\\.$#"
|
350 |
+
count: 1
|
351 |
+
path: src/Cookie/SetCookie.php
|
352 |
+
|
353 |
+
-
|
354 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\BadResponseException\\:\\:__construct\\(\\) has parameter \\$handlerContext with no value type specified in iterable type array\\.$#"
|
355 |
+
count: 1
|
356 |
+
path: src/Exception/BadResponseException.php
|
357 |
+
|
358 |
+
-
|
359 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\BadResponseException\\:\\:__construct\\(\\) has parameter \\$message with no typehint specified\\.$#"
|
360 |
+
count: 1
|
361 |
+
path: src/Exception/BadResponseException.php
|
362 |
+
|
363 |
+
-
|
364 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\ConnectException\\:\\:__construct\\(\\) has parameter \\$handlerContext with no value type specified in iterable type array\\.$#"
|
365 |
+
count: 1
|
366 |
+
path: src/Exception/ConnectException.php
|
367 |
+
|
368 |
+
-
|
369 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\ConnectException\\:\\:__construct\\(\\) has parameter \\$message with no typehint specified\\.$#"
|
370 |
+
count: 1
|
371 |
+
path: src/Exception/ConnectException.php
|
372 |
+
|
373 |
+
-
|
374 |
+
message: "#^Property GuzzleHttp\\\\Exception\\\\RequestException\\:\\:\\$handlerContext type has no value type specified in iterable type array\\.$#"
|
375 |
+
count: 1
|
376 |
+
path: src/Exception/RequestException.php
|
377 |
+
|
378 |
+
-
|
379 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\RequestException\\:\\:__construct\\(\\) has parameter \\$handlerContext with no value type specified in iterable type array\\.$#"
|
380 |
+
count: 1
|
381 |
+
path: src/Exception/RequestException.php
|
382 |
+
|
383 |
+
-
|
384 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\RequestException\\:\\:__construct\\(\\) has parameter \\$message with no typehint specified\\.$#"
|
385 |
+
count: 1
|
386 |
+
path: src/Exception/RequestException.php
|
387 |
+
|
388 |
+
-
|
389 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\RequestException\\:\\:create\\(\\) has parameter \\$ctx with no value type specified in iterable type array\\.$#"
|
390 |
+
count: 1
|
391 |
+
path: src/Exception/RequestException.php
|
392 |
+
|
393 |
+
-
|
394 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\RequestException\\:\\:getHandlerContext\\(\\) return type has no value type specified in iterable type array\\.$#"
|
395 |
+
count: 1
|
396 |
+
path: src/Exception/RequestException.php
|
397 |
+
|
398 |
+
-
|
399 |
+
message: "#^Property GuzzleHttp\\\\Exception\\\\SeekException\\:\\:\\$stream has no typehint specified\\.$#"
|
400 |
+
count: 1
|
401 |
+
path: src/Exception/SeekException.php
|
402 |
+
|
403 |
+
-
|
404 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\SeekException\\:\\:__construct\\(\\) has parameter \\$msg with no typehint specified\\.$#"
|
405 |
+
count: 1
|
406 |
+
path: src/Exception/SeekException.php
|
407 |
+
|
408 |
+
-
|
409 |
+
message: "#^Method GuzzleHttp\\\\Exception\\\\SeekException\\:\\:__construct\\(\\) has parameter \\$pos with no typehint specified\\.$#"
|
410 |
+
count: 1
|
411 |
+
path: src/Exception/SeekException.php
|
412 |
+
|
413 |
+
-
|
414 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:\\$handles type has no value type specified in iterable type array\\.$#"
|
415 |
+
count: 1
|
416 |
+
path: src/Handler/CurlFactory.php
|
417 |
+
|
418 |
+
-
|
419 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:create\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
420 |
+
count: 1
|
421 |
+
path: src/Handler/CurlFactory.php
|
422 |
+
|
423 |
+
-
|
424 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:release\\(\\) has no return typehint specified\\.$#"
|
425 |
+
count: 1
|
426 |
+
path: src/Handler/CurlFactory.php
|
427 |
+
|
428 |
+
-
|
429 |
+
message: "#^Negated boolean expression is always false\\.$#"
|
430 |
+
count: 1
|
431 |
+
path: src/Handler/CurlFactory.php
|
432 |
+
|
433 |
+
-
|
434 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:invokeStats\\(\\) has no return typehint specified\\.$#"
|
435 |
+
count: 1
|
436 |
+
path: src/Handler/CurlFactory.php
|
437 |
+
|
438 |
+
-
|
439 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:finishError\\(\\) has no return typehint specified\\.$#"
|
440 |
+
count: 1
|
441 |
+
path: src/Handler/CurlFactory.php
|
442 |
+
|
443 |
+
-
|
444 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:createRejection\\(\\) has no return typehint specified\\.$#"
|
445 |
+
count: 1
|
446 |
+
path: src/Handler/CurlFactory.php
|
447 |
+
|
448 |
+
-
|
449 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:createRejection\\(\\) has parameter \\$ctx with no value type specified in iterable type array\\.$#"
|
450 |
+
count: 1
|
451 |
+
path: src/Handler/CurlFactory.php
|
452 |
+
|
453 |
+
-
|
454 |
+
message: "#^If condition is always true\\.$#"
|
455 |
+
count: 1
|
456 |
+
path: src/Handler/CurlFactory.php
|
457 |
+
|
458 |
+
-
|
459 |
+
message: "#^Unreachable statement \\- code above always terminates\\.$#"
|
460 |
+
count: 1
|
461 |
+
path: src/Handler/CurlFactory.php
|
462 |
+
|
463 |
+
-
|
464 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:getDefaultConf\\(\\) has no return typehint specified\\.$#"
|
465 |
+
count: 1
|
466 |
+
path: src/Handler/CurlFactory.php
|
467 |
+
|
468 |
+
-
|
469 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyMethod\\(\\) has no return typehint specified\\.$#"
|
470 |
+
count: 1
|
471 |
+
path: src/Handler/CurlFactory.php
|
472 |
+
|
473 |
+
-
|
474 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyMethod\\(\\) has parameter \\$conf with no value type specified in iterable type array\\.$#"
|
475 |
+
count: 1
|
476 |
+
path: src/Handler/CurlFactory.php
|
477 |
+
|
478 |
+
-
|
479 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyBody\\(\\) has no return typehint specified\\.$#"
|
480 |
+
count: 1
|
481 |
+
path: src/Handler/CurlFactory.php
|
482 |
+
|
483 |
+
-
|
484 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyBody\\(\\) has parameter \\$conf with no value type specified in iterable type array\\.$#"
|
485 |
+
count: 1
|
486 |
+
path: src/Handler/CurlFactory.php
|
487 |
+
|
488 |
+
-
|
489 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyBody\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
490 |
+
count: 1
|
491 |
+
path: src/Handler/CurlFactory.php
|
492 |
+
|
493 |
+
-
|
494 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyHeaders\\(\\) has no return typehint specified\\.$#"
|
495 |
+
count: 1
|
496 |
+
path: src/Handler/CurlFactory.php
|
497 |
+
|
498 |
+
-
|
499 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyHeaders\\(\\) has parameter \\$conf with no value type specified in iterable type array\\.$#"
|
500 |
+
count: 1
|
501 |
+
path: src/Handler/CurlFactory.php
|
502 |
+
|
503 |
+
-
|
504 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:removeHeader\\(\\) has no return typehint specified\\.$#"
|
505 |
+
count: 1
|
506 |
+
path: src/Handler/CurlFactory.php
|
507 |
+
|
508 |
+
-
|
509 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:removeHeader\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
510 |
+
count: 1
|
511 |
+
path: src/Handler/CurlFactory.php
|
512 |
+
|
513 |
+
-
|
514 |
+
message: "#^Parameter \\#1 \\$str1 of function strcasecmp expects string, int\\|string given\\.$#"
|
515 |
+
count: 1
|
516 |
+
path: src/Handler/CurlFactory.php
|
517 |
+
|
518 |
+
-
|
519 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyHandlerOptions\\(\\) has no return typehint specified\\.$#"
|
520 |
+
count: 1
|
521 |
+
path: src/Handler/CurlFactory.php
|
522 |
+
|
523 |
+
-
|
524 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:applyHandlerOptions\\(\\) has parameter \\$conf with no value type specified in iterable type array\\.$#"
|
525 |
+
count: 1
|
526 |
+
path: src/Handler/CurlFactory.php
|
527 |
+
|
528 |
+
-
|
529 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:retryFailedRewind\\(\\) has no return typehint specified\\.$#"
|
530 |
+
count: 1
|
531 |
+
path: src/Handler/CurlFactory.php
|
532 |
+
|
533 |
+
-
|
534 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:retryFailedRewind\\(\\) has parameter \\$ctx with no value type specified in iterable type array\\.$#"
|
535 |
+
count: 1
|
536 |
+
path: src/Handler/CurlFactory.php
|
537 |
+
|
538 |
+
-
|
539 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactory\\:\\:createHeaderFn\\(\\) has no return typehint specified\\.$#"
|
540 |
+
count: 1
|
541 |
+
path: src/Handler/CurlFactory.php
|
542 |
+
|
543 |
+
-
|
544 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactoryInterface\\:\\:create\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
545 |
+
count: 1
|
546 |
+
path: src/Handler/CurlFactoryInterface.php
|
547 |
+
|
548 |
+
-
|
549 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlFactoryInterface\\:\\:release\\(\\) has no return typehint specified\\.$#"
|
550 |
+
count: 1
|
551 |
+
path: src/Handler/CurlFactoryInterface.php
|
552 |
+
|
553 |
+
-
|
554 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlHandler\\:\\:__construct\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
555 |
+
count: 1
|
556 |
+
path: src/Handler/CurlHandler.php
|
557 |
+
|
558 |
+
-
|
559 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlHandler\\:\\:__invoke\\(\\) has no return typehint specified\\.$#"
|
560 |
+
count: 1
|
561 |
+
path: src/Handler/CurlHandler.php
|
562 |
+
|
563 |
+
-
|
564 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlHandler\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
565 |
+
count: 1
|
566 |
+
path: src/Handler/CurlHandler.php
|
567 |
+
|
568 |
+
-
|
569 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$selectTimeout has no typehint specified\\.$#"
|
570 |
+
count: 1
|
571 |
+
path: src/Handler/CurlMultiHandler.php
|
572 |
+
|
573 |
+
-
|
574 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$active has no typehint specified\\.$#"
|
575 |
+
count: 1
|
576 |
+
path: src/Handler/CurlMultiHandler.php
|
577 |
+
|
578 |
+
-
|
579 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$handles has no typehint specified\\.$#"
|
580 |
+
count: 1
|
581 |
+
path: src/Handler/CurlMultiHandler.php
|
582 |
+
|
583 |
+
-
|
584 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$delays has no typehint specified\\.$#"
|
585 |
+
count: 1
|
586 |
+
path: src/Handler/CurlMultiHandler.php
|
587 |
+
|
588 |
+
-
|
589 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$options has no typehint specified\\.$#"
|
590 |
+
count: 1
|
591 |
+
path: src/Handler/CurlMultiHandler.php
|
592 |
+
|
593 |
+
-
|
594 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:__construct\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
595 |
+
count: 1
|
596 |
+
path: src/Handler/CurlMultiHandler.php
|
597 |
+
|
598 |
+
-
|
599 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:__get\\(\\) has no return typehint specified\\.$#"
|
600 |
+
count: 1
|
601 |
+
path: src/Handler/CurlMultiHandler.php
|
602 |
+
|
603 |
+
-
|
604 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:__get\\(\\) has parameter \\$name with no typehint specified\\.$#"
|
605 |
+
count: 1
|
606 |
+
path: src/Handler/CurlMultiHandler.php
|
607 |
+
|
608 |
+
-
|
609 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:\\$_mh \\(resource\\) does not accept resource\\|false\\.$#"
|
610 |
+
count: 1
|
611 |
+
path: src/Handler/CurlMultiHandler.php
|
612 |
+
|
613 |
+
-
|
614 |
+
message: "#^Parameter \\#1 \\$mh of function curl_multi_setopt expects resource, resource\\|false given\\.$#"
|
615 |
+
count: 1
|
616 |
+
path: src/Handler/CurlMultiHandler.php
|
617 |
+
|
618 |
+
-
|
619 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:__invoke\\(\\) has no return typehint specified\\.$#"
|
620 |
+
count: 1
|
621 |
+
path: src/Handler/CurlMultiHandler.php
|
622 |
+
|
623 |
+
-
|
624 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
625 |
+
count: 1
|
626 |
+
path: src/Handler/CurlMultiHandler.php
|
627 |
+
|
628 |
+
-
|
629 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:tick\\(\\) has no return typehint specified\\.$#"
|
630 |
+
count: 1
|
631 |
+
path: src/Handler/CurlMultiHandler.php
|
632 |
+
|
633 |
+
-
|
634 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:execute\\(\\) has no return typehint specified\\.$#"
|
635 |
+
count: 1
|
636 |
+
path: src/Handler/CurlMultiHandler.php
|
637 |
+
|
638 |
+
-
|
639 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:addRequest\\(\\) has no return typehint specified\\.$#"
|
640 |
+
count: 1
|
641 |
+
path: src/Handler/CurlMultiHandler.php
|
642 |
+
|
643 |
+
-
|
644 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:addRequest\\(\\) has parameter \\$entry with no value type specified in iterable type array\\.$#"
|
645 |
+
count: 1
|
646 |
+
path: src/Handler/CurlMultiHandler.php
|
647 |
+
|
648 |
+
-
|
649 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:processMessages\\(\\) has no return typehint specified\\.$#"
|
650 |
+
count: 1
|
651 |
+
path: src/Handler/CurlMultiHandler.php
|
652 |
+
|
653 |
+
-
|
654 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\CurlMultiHandler\\:\\:timeToNext\\(\\) has no return typehint specified\\.$#"
|
655 |
+
count: 1
|
656 |
+
path: src/Handler/CurlMultiHandler.php
|
657 |
+
|
658 |
+
-
|
659 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\EasyHandle\\:\\:\\$headers type has no value type specified in iterable type array\\.$#"
|
660 |
+
count: 1
|
661 |
+
path: src/Handler/EasyHandle.php
|
662 |
+
|
663 |
+
-
|
664 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\EasyHandle\\:\\:\\$options type has no value type specified in iterable type array\\.$#"
|
665 |
+
count: 1
|
666 |
+
path: src/Handler/EasyHandle.php
|
667 |
+
|
668 |
+
-
|
669 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\EasyHandle\\:\\:createResponse\\(\\) has no return typehint specified\\.$#"
|
670 |
+
count: 1
|
671 |
+
path: src/Handler/EasyHandle.php
|
672 |
+
|
673 |
+
-
|
674 |
+
message: "#^Parameter \\#1 \\$status of class GuzzleHttp\\\\Psr7\\\\Response constructor expects int, string given\\.$#"
|
675 |
+
count: 1
|
676 |
+
path: src/Handler/EasyHandle.php
|
677 |
+
|
678 |
+
-
|
679 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\EasyHandle\\:\\:__get\\(\\) has no return typehint specified\\.$#"
|
680 |
+
count: 1
|
681 |
+
path: src/Handler/EasyHandle.php
|
682 |
+
|
683 |
+
-
|
684 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\EasyHandle\\:\\:__get\\(\\) has parameter \\$name with no typehint specified\\.$#"
|
685 |
+
count: 1
|
686 |
+
path: src/Handler/EasyHandle.php
|
687 |
+
|
688 |
+
-
|
689 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:\\$queue has no typehint specified\\.$#"
|
690 |
+
count: 1
|
691 |
+
path: src/Handler/MockHandler.php
|
692 |
+
|
693 |
+
-
|
694 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:\\$lastRequest has no typehint specified\\.$#"
|
695 |
+
count: 1
|
696 |
+
path: src/Handler/MockHandler.php
|
697 |
+
|
698 |
+
-
|
699 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:\\$lastOptions has no typehint specified\\.$#"
|
700 |
+
count: 1
|
701 |
+
path: src/Handler/MockHandler.php
|
702 |
+
|
703 |
+
-
|
704 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:\\$onFulfilled has no typehint specified\\.$#"
|
705 |
+
count: 1
|
706 |
+
path: src/Handler/MockHandler.php
|
707 |
+
|
708 |
+
-
|
709 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:\\$onRejected has no typehint specified\\.$#"
|
710 |
+
count: 1
|
711 |
+
path: src/Handler/MockHandler.php
|
712 |
+
|
713 |
+
-
|
714 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:createWithMiddleware\\(\\) has parameter \\$queue with no value type specified in iterable type array\\.$#"
|
715 |
+
count: 1
|
716 |
+
path: src/Handler/MockHandler.php
|
717 |
+
|
718 |
+
-
|
719 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:__construct\\(\\) has parameter \\$queue with no value type specified in iterable type array\\.$#"
|
720 |
+
count: 1
|
721 |
+
path: src/Handler/MockHandler.php
|
722 |
+
|
723 |
+
-
|
724 |
+
message: "#^Parameter \\#2 \\$parameters of function call_user_func_array expects array\\<int, mixed\\>, array given\\.$#"
|
725 |
+
count: 1
|
726 |
+
path: src/Handler/MockHandler.php
|
727 |
+
|
728 |
+
-
|
729 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:__invoke\\(\\) has no return typehint specified\\.$#"
|
730 |
+
count: 1
|
731 |
+
path: src/Handler/MockHandler.php
|
732 |
+
|
733 |
+
-
|
734 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
735 |
+
count: 1
|
736 |
+
path: src/Handler/MockHandler.php
|
737 |
+
|
738 |
+
-
|
739 |
+
message: "#^Binary operation \"\\*\" between float\\|int\\|string and 1000 results in an error\\.$#"
|
740 |
+
count: 1
|
741 |
+
path: src/Handler/MockHandler.php
|
742 |
+
|
743 |
+
-
|
744 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:append\\(\\) has no return typehint specified\\.$#"
|
745 |
+
count: 1
|
746 |
+
path: src/Handler/MockHandler.php
|
747 |
+
|
748 |
+
-
|
749 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:getLastOptions\\(\\) return type has no value type specified in iterable type array\\.$#"
|
750 |
+
count: 1
|
751 |
+
path: src/Handler/MockHandler.php
|
752 |
+
|
753 |
+
-
|
754 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:reset\\(\\) has no return typehint specified\\.$#"
|
755 |
+
count: 1
|
756 |
+
path: src/Handler/MockHandler.php
|
757 |
+
|
758 |
+
-
|
759 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:invokeStats\\(\\) has no return typehint specified\\.$#"
|
760 |
+
count: 1
|
761 |
+
path: src/Handler/MockHandler.php
|
762 |
+
|
763 |
+
-
|
764 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:invokeStats\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
765 |
+
count: 1
|
766 |
+
path: src/Handler/MockHandler.php
|
767 |
+
|
768 |
+
-
|
769 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\MockHandler\\:\\:invokeStats\\(\\) has parameter \\$reason with no typehint specified\\.$#"
|
770 |
+
count: 1
|
771 |
+
path: src/Handler/MockHandler.php
|
772 |
+
|
773 |
+
-
|
774 |
+
message: "#^Property GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:\\$lastHeaders has no typehint specified\\.$#"
|
775 |
+
count: 1
|
776 |
+
path: src/Handler/StreamHandler.php
|
777 |
+
|
778 |
+
-
|
779 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
780 |
+
count: 1
|
781 |
+
path: src/Handler/StreamHandler.php
|
782 |
+
|
783 |
+
-
|
784 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:invokeStats\\(\\) has no return typehint specified\\.$#"
|
785 |
+
count: 1
|
786 |
+
path: src/Handler/StreamHandler.php
|
787 |
+
|
788 |
+
-
|
789 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:invokeStats\\(\\) has parameter \\$error with no typehint specified\\.$#"
|
790 |
+
count: 1
|
791 |
+
path: src/Handler/StreamHandler.php
|
792 |
+
|
793 |
+
-
|
794 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:invokeStats\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
795 |
+
count: 1
|
796 |
+
path: src/Handler/StreamHandler.php
|
797 |
+
|
798 |
+
-
|
799 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:invokeStats\\(\\) has parameter \\$startTime with no typehint specified\\.$#"
|
800 |
+
count: 1
|
801 |
+
path: src/Handler/StreamHandler.php
|
802 |
+
|
803 |
+
-
|
804 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createResponse\\(\\) has no return typehint specified\\.$#"
|
805 |
+
count: 1
|
806 |
+
path: src/Handler/StreamHandler.php
|
807 |
+
|
808 |
+
-
|
809 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createResponse\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
810 |
+
count: 1
|
811 |
+
path: src/Handler/StreamHandler.php
|
812 |
+
|
813 |
+
-
|
814 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createResponse\\(\\) has parameter \\$startTime with no typehint specified\\.$#"
|
815 |
+
count: 1
|
816 |
+
path: src/Handler/StreamHandler.php
|
817 |
+
|
818 |
+
-
|
819 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createResponse\\(\\) has parameter \\$stream with no typehint specified\\.$#"
|
820 |
+
count: 1
|
821 |
+
path: src/Handler/StreamHandler.php
|
822 |
+
|
823 |
+
-
|
824 |
+
message: "#^Parameter \\#1 \\$status of class GuzzleHttp\\\\Psr7\\\\Response constructor expects int, string given\\.$#"
|
825 |
+
count: 1
|
826 |
+
path: src/Handler/StreamHandler.php
|
827 |
+
|
828 |
+
-
|
829 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createSink\\(\\) has no return typehint specified\\.$#"
|
830 |
+
count: 1
|
831 |
+
path: src/Handler/StreamHandler.php
|
832 |
+
|
833 |
+
-
|
834 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createSink\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
835 |
+
count: 1
|
836 |
+
path: src/Handler/StreamHandler.php
|
837 |
+
|
838 |
+
-
|
839 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:checkDecode\\(\\) has no return typehint specified\\.$#"
|
840 |
+
count: 1
|
841 |
+
path: src/Handler/StreamHandler.php
|
842 |
+
|
843 |
+
-
|
844 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:checkDecode\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#"
|
845 |
+
count: 1
|
846 |
+
path: src/Handler/StreamHandler.php
|
847 |
+
|
848 |
+
-
|
849 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:checkDecode\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
850 |
+
count: 1
|
851 |
+
path: src/Handler/StreamHandler.php
|
852 |
+
|
853 |
+
-
|
854 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:checkDecode\\(\\) has parameter \\$stream with no typehint specified\\.$#"
|
855 |
+
count: 1
|
856 |
+
path: src/Handler/StreamHandler.php
|
857 |
+
|
858 |
+
-
|
859 |
+
message: "#^Argument of an invalid type array\\<int, array\\<string, int\\|string\\>\\>\\|null supplied for foreach, only iterables are supported\\.$#"
|
860 |
+
count: 1
|
861 |
+
path: src/Handler/StreamHandler.php
|
862 |
+
|
863 |
+
-
|
864 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createStream\\(\\) has no return typehint specified\\.$#"
|
865 |
+
count: 1
|
866 |
+
path: src/Handler/StreamHandler.php
|
867 |
+
|
868 |
+
-
|
869 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:createStream\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
870 |
+
count: 1
|
871 |
+
path: src/Handler/StreamHandler.php
|
872 |
+
|
873 |
+
-
|
874 |
+
message: "#^Parameter \\#3 \\$use_include_path of function fopen expects bool, null given\\.$#"
|
875 |
+
count: 1
|
876 |
+
path: src/Handler/StreamHandler.php
|
877 |
+
|
878 |
+
-
|
879 |
+
message: "#^Parameter \\#1 \\$stream of function stream_set_timeout expects resource, resource\\|false given\\.$#"
|
880 |
+
count: 1
|
881 |
+
path: src/Handler/StreamHandler.php
|
882 |
+
|
883 |
+
-
|
884 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:resolveHost\\(\\) has no return typehint specified\\.$#"
|
885 |
+
count: 1
|
886 |
+
path: src/Handler/StreamHandler.php
|
887 |
+
|
888 |
+
-
|
889 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:resolveHost\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
890 |
+
count: 1
|
891 |
+
path: src/Handler/StreamHandler.php
|
892 |
+
|
893 |
+
-
|
894 |
+
message: "#^Cannot access offset 0 on array\\|false\\.$#"
|
895 |
+
count: 2
|
896 |
+
path: src/Handler/StreamHandler.php
|
897 |
+
|
898 |
+
-
|
899 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:getDefaultContext\\(\\) has no return typehint specified\\.$#"
|
900 |
+
count: 1
|
901 |
+
path: src/Handler/StreamHandler.php
|
902 |
+
|
903 |
+
-
|
904 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_proxy\\(\\) has no return typehint specified\\.$#"
|
905 |
+
count: 1
|
906 |
+
path: src/Handler/StreamHandler.php
|
907 |
+
|
908 |
+
-
|
909 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_proxy\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
910 |
+
count: 1
|
911 |
+
path: src/Handler/StreamHandler.php
|
912 |
+
|
913 |
+
-
|
914 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_proxy\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
915 |
+
count: 1
|
916 |
+
path: src/Handler/StreamHandler.php
|
917 |
+
|
918 |
+
-
|
919 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_proxy\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
920 |
+
count: 1
|
921 |
+
path: src/Handler/StreamHandler.php
|
922 |
+
|
923 |
+
-
|
924 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_timeout\\(\\) has no return typehint specified\\.$#"
|
925 |
+
count: 1
|
926 |
+
path: src/Handler/StreamHandler.php
|
927 |
+
|
928 |
+
-
|
929 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_timeout\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
930 |
+
count: 1
|
931 |
+
path: src/Handler/StreamHandler.php
|
932 |
+
|
933 |
+
-
|
934 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_timeout\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
935 |
+
count: 1
|
936 |
+
path: src/Handler/StreamHandler.php
|
937 |
+
|
938 |
+
-
|
939 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_timeout\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
940 |
+
count: 1
|
941 |
+
path: src/Handler/StreamHandler.php
|
942 |
+
|
943 |
+
-
|
944 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_verify\\(\\) has no return typehint specified\\.$#"
|
945 |
+
count: 1
|
946 |
+
path: src/Handler/StreamHandler.php
|
947 |
+
|
948 |
+
-
|
949 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_verify\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
950 |
+
count: 1
|
951 |
+
path: src/Handler/StreamHandler.php
|
952 |
+
|
953 |
+
-
|
954 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_verify\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
955 |
+
count: 1
|
956 |
+
path: src/Handler/StreamHandler.php
|
957 |
+
|
958 |
+
-
|
959 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_verify\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
960 |
+
count: 1
|
961 |
+
path: src/Handler/StreamHandler.php
|
962 |
+
|
963 |
+
-
|
964 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_cert\\(\\) has no return typehint specified\\.$#"
|
965 |
+
count: 1
|
966 |
+
path: src/Handler/StreamHandler.php
|
967 |
+
|
968 |
+
-
|
969 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_cert\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
970 |
+
count: 1
|
971 |
+
path: src/Handler/StreamHandler.php
|
972 |
+
|
973 |
+
-
|
974 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_cert\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
975 |
+
count: 1
|
976 |
+
path: src/Handler/StreamHandler.php
|
977 |
+
|
978 |
+
-
|
979 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_cert\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
980 |
+
count: 1
|
981 |
+
path: src/Handler/StreamHandler.php
|
982 |
+
|
983 |
+
-
|
984 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_progress\\(\\) has no return typehint specified\\.$#"
|
985 |
+
count: 1
|
986 |
+
path: src/Handler/StreamHandler.php
|
987 |
+
|
988 |
+
-
|
989 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_progress\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
990 |
+
count: 1
|
991 |
+
path: src/Handler/StreamHandler.php
|
992 |
+
|
993 |
+
-
|
994 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_progress\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
995 |
+
count: 1
|
996 |
+
path: src/Handler/StreamHandler.php
|
997 |
+
|
998 |
+
-
|
999 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_progress\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
1000 |
+
count: 1
|
1001 |
+
path: src/Handler/StreamHandler.php
|
1002 |
+
|
1003 |
+
-
|
1004 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_debug\\(\\) has no return typehint specified\\.$#"
|
1005 |
+
count: 1
|
1006 |
+
path: src/Handler/StreamHandler.php
|
1007 |
+
|
1008 |
+
-
|
1009 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_debug\\(\\) has parameter \\$options with no typehint specified\\.$#"
|
1010 |
+
count: 1
|
1011 |
+
path: src/Handler/StreamHandler.php
|
1012 |
+
|
1013 |
+
-
|
1014 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_debug\\(\\) has parameter \\$params with no typehint specified\\.$#"
|
1015 |
+
count: 1
|
1016 |
+
path: src/Handler/StreamHandler.php
|
1017 |
+
|
1018 |
+
-
|
1019 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:add_debug\\(\\) has parameter \\$value with no typehint specified\\.$#"
|
1020 |
+
count: 1
|
1021 |
+
path: src/Handler/StreamHandler.php
|
1022 |
+
|
1023 |
+
-
|
1024 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:addNotification\\(\\) has no return typehint specified\\.$#"
|
1025 |
+
count: 1
|
1026 |
+
path: src/Handler/StreamHandler.php
|
1027 |
+
|
1028 |
+
-
|
1029 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:addNotification\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#"
|
1030 |
+
count: 1
|
1031 |
+
path: src/Handler/StreamHandler.php
|
1032 |
+
|
1033 |
+
-
|
1034 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:callArray\\(\\) has no return typehint specified\\.$#"
|
1035 |
+
count: 1
|
1036 |
+
path: src/Handler/StreamHandler.php
|
1037 |
+
|
1038 |
+
-
|
1039 |
+
message: "#^Method GuzzleHttp\\\\Handler\\\\StreamHandler\\:\\:callArray\\(\\) has parameter \\$functions with no value type specified in iterable type array\\.$#"
|
1040 |
+
count: 1
|
1041 |
+
path: src/Handler/StreamHandler.php
|
1042 |
+
|
1043 |
+
-
|
1044 |
+
message: "#^Property GuzzleHttp\\\\HandlerStack\\:\\:\\$stack type has no value type specified in iterable type array\\.$#"
|
1045 |
+
count: 1
|
1046 |
+
path: src/HandlerStack.php
|
1047 |
+
|
1048 |
+
-
|
1049 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1050 |
+
count: 1
|
1051 |
+
path: src/HandlerStack.php
|
1052 |
+
|
1053 |
+
-
|
1054 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:setHandler\\(\\) has no return typehint specified\\.$#"
|
1055 |
+
count: 1
|
1056 |
+
path: src/HandlerStack.php
|
1057 |
+
|
1058 |
+
-
|
1059 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:unshift\\(\\) has no return typehint specified\\.$#"
|
1060 |
+
count: 1
|
1061 |
+
path: src/HandlerStack.php
|
1062 |
+
|
1063 |
+
-
|
1064 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:push\\(\\) has no return typehint specified\\.$#"
|
1065 |
+
count: 1
|
1066 |
+
path: src/HandlerStack.php
|
1067 |
+
|
1068 |
+
-
|
1069 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:before\\(\\) has no return typehint specified\\.$#"
|
1070 |
+
count: 1
|
1071 |
+
path: src/HandlerStack.php
|
1072 |
+
|
1073 |
+
-
|
1074 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:after\\(\\) has no return typehint specified\\.$#"
|
1075 |
+
count: 1
|
1076 |
+
path: src/HandlerStack.php
|
1077 |
+
|
1078 |
+
-
|
1079 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:remove\\(\\) has no return typehint specified\\.$#"
|
1080 |
+
count: 1
|
1081 |
+
path: src/HandlerStack.php
|
1082 |
+
|
1083 |
+
-
|
1084 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:splice\\(\\) has no return typehint specified\\.$#"
|
1085 |
+
count: 1
|
1086 |
+
path: src/HandlerStack.php
|
1087 |
+
|
1088 |
+
-
|
1089 |
+
message: "#^Method GuzzleHttp\\\\HandlerStack\\:\\:debugCallable\\(\\) has parameter \\$fn with no value type specified in iterable type array\\.$#"
|
1090 |
+
count: 1
|
1091 |
+
path: src/HandlerStack.php
|
1092 |
+
|
1093 |
+
-
|
1094 |
+
message: "#^Parameter \\#1 \\$obj of function spl_object_hash expects object, callable given\\.$#"
|
1095 |
+
count: 1
|
1096 |
+
path: src/HandlerStack.php
|
1097 |
+
|
1098 |
+
-
|
1099 |
+
message: "#^Method GuzzleHttp\\\\MessageFormatter\\:\\:format\\(\\) should return string but returns string\\|null\\.$#"
|
1100 |
+
count: 1
|
1101 |
+
path: src/MessageFormatter.php
|
1102 |
+
|
1103 |
+
-
|
1104 |
+
message: "#^Method GuzzleHttp\\\\Middleware\\:\\:history\\(\\) has parameter \\$container with generic interface ArrayAccess but does not specify its types\\: TKey, TValue$#"
|
1105 |
+
count: 1
|
1106 |
+
path: src/Middleware.php
|
1107 |
+
|
1108 |
+
-
|
1109 |
+
message: "#^Method GuzzleHttp\\\\Middleware\\:\\:history\\(\\) has parameter \\$container with no value type specified in iterable type array\\.$#"
|
1110 |
+
count: 1
|
1111 |
+
path: src/Middleware.php
|
1112 |
+
|
1113 |
+
-
|
1114 |
+
message: "#^Result of && is always false\\.$#"
|
1115 |
+
count: 1
|
1116 |
+
path: src/Middleware.php
|
1117 |
+
|
1118 |
+
-
|
1119 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:__construct\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#"
|
1120 |
+
count: 1
|
1121 |
+
path: src/Pool.php
|
1122 |
+
|
1123 |
+
-
|
1124 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:__construct\\(\\) has parameter \\$requests with no value type specified in iterable type array\\|Iterator\\.$#"
|
1125 |
+
count: 1
|
1126 |
+
path: src/Pool.php
|
1127 |
+
|
1128 |
+
-
|
1129 |
+
message: "#^Return typehint of method GuzzleHttp\\\\Pool\\:\\:promise\\(\\) has invalid type GuzzleHttp\\\\GuzzleHttp\\\\Promise\\\\Promise\\.$#"
|
1130 |
+
count: 1
|
1131 |
+
path: src/Pool.php
|
1132 |
+
|
1133 |
+
-
|
1134 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:promise\\(\\) should return GuzzleHttp\\\\GuzzleHttp\\\\Promise\\\\Promise but returns GuzzleHttp\\\\Promise\\\\PromiseInterface\\.$#"
|
1135 |
+
count: 1
|
1136 |
+
path: src/Pool.php
|
1137 |
+
|
1138 |
+
-
|
1139 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:batch\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1140 |
+
count: 1
|
1141 |
+
path: src/Pool.php
|
1142 |
+
|
1143 |
+
-
|
1144 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:batch\\(\\) has parameter \\$requests with no value type specified in iterable type array\\|Iterator\\.$#"
|
1145 |
+
count: 1
|
1146 |
+
path: src/Pool.php
|
1147 |
+
|
1148 |
+
-
|
1149 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:batch\\(\\) return type has no value type specified in iterable type array\\.$#"
|
1150 |
+
count: 1
|
1151 |
+
path: src/Pool.php
|
1152 |
+
|
1153 |
+
-
|
1154 |
+
message: "#^Unsafe usage of new static\\(\\)\\.$#"
|
1155 |
+
count: 1
|
1156 |
+
path: src/Pool.php
|
1157 |
+
|
1158 |
+
-
|
1159 |
+
message: "#^Call to method wait\\(\\) on an unknown class GuzzleHttp\\\\GuzzleHttp\\\\Promise\\\\Promise\\.$#"
|
1160 |
+
count: 1
|
1161 |
+
path: src/Pool.php
|
1162 |
+
|
1163 |
+
-
|
1164 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:cmpCallback\\(\\) has parameter \\$name with no typehint specified\\.$#"
|
1165 |
+
count: 1
|
1166 |
+
path: src/Pool.php
|
1167 |
+
|
1168 |
+
-
|
1169 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:cmpCallback\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1170 |
+
count: 1
|
1171 |
+
path: src/Pool.php
|
1172 |
+
|
1173 |
+
-
|
1174 |
+
message: "#^Method GuzzleHttp\\\\Pool\\:\\:cmpCallback\\(\\) has parameter \\$results with no value type specified in iterable type array\\.$#"
|
1175 |
+
count: 1
|
1176 |
+
path: src/Pool.php
|
1177 |
+
|
1178 |
+
-
|
1179 |
+
message: "#^Method GuzzleHttp\\\\PrepareBodyMiddleware\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1180 |
+
count: 1
|
1181 |
+
path: src/PrepareBodyMiddleware.php
|
1182 |
+
|
1183 |
+
-
|
1184 |
+
message: "#^Method GuzzleHttp\\\\PrepareBodyMiddleware\\:\\:addExpectHeader\\(\\) has parameter \\$modify with no value type specified in iterable type array\\.$#"
|
1185 |
+
count: 1
|
1186 |
+
path: src/PrepareBodyMiddleware.php
|
1187 |
+
|
1188 |
+
-
|
1189 |
+
message: "#^Method GuzzleHttp\\\\PrepareBodyMiddleware\\:\\:addExpectHeader\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1190 |
+
count: 1
|
1191 |
+
path: src/PrepareBodyMiddleware.php
|
1192 |
+
|
1193 |
+
-
|
1194 |
+
message: "#^Property GuzzleHttp\\\\RedirectMiddleware\\:\\:\\$defaultSettings has no typehint specified\\.$#"
|
1195 |
+
count: 1
|
1196 |
+
path: src/RedirectMiddleware.php
|
1197 |
+
|
1198 |
+
-
|
1199 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1200 |
+
count: 1
|
1201 |
+
path: src/RedirectMiddleware.php
|
1202 |
+
|
1203 |
+
-
|
1204 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:checkRedirect\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1205 |
+
count: 1
|
1206 |
+
path: src/RedirectMiddleware.php
|
1207 |
+
|
1208 |
+
-
|
1209 |
+
message: "#^Parameter \\#1 \\$str of function substr expects string, int given\\.$#"
|
1210 |
+
count: 1
|
1211 |
+
path: src/RedirectMiddleware.php
|
1212 |
+
|
1213 |
+
-
|
1214 |
+
message: "#^Parameter \\#1 \\$promise of method GuzzleHttp\\\\RedirectMiddleware\\:\\:withTracking\\(\\) expects GuzzleHttp\\\\Promise\\\\PromiseInterface, GuzzleHttp\\\\Promise\\\\PromiseInterface\\|Psr\\\\Http\\\\Message\\\\ResponseInterface given\\.$#"
|
1215 |
+
count: 1
|
1216 |
+
path: src/RedirectMiddleware.php
|
1217 |
+
|
1218 |
+
-
|
1219 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:withTracking\\(\\) has parameter \\$statusCode with no typehint specified\\.$#"
|
1220 |
+
count: 1
|
1221 |
+
path: src/RedirectMiddleware.php
|
1222 |
+
|
1223 |
+
-
|
1224 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:withTracking\\(\\) has parameter \\$uri with no typehint specified\\.$#"
|
1225 |
+
count: 1
|
1226 |
+
path: src/RedirectMiddleware.php
|
1227 |
+
|
1228 |
+
-
|
1229 |
+
message: "#^Parameter \\#2 \\$value of method Psr\\\\Http\\\\Message\\\\MessageInterface\\:\\:withHeader\\(\\) expects array\\<string\\>\\|string, array given\\.$#"
|
1230 |
+
count: 2
|
1231 |
+
path: src/RedirectMiddleware.php
|
1232 |
+
|
1233 |
+
-
|
1234 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:guardMax\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1235 |
+
count: 1
|
1236 |
+
path: src/RedirectMiddleware.php
|
1237 |
+
|
1238 |
+
-
|
1239 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:modifyRequest\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1240 |
+
count: 1
|
1241 |
+
path: src/RedirectMiddleware.php
|
1242 |
+
|
1243 |
+
-
|
1244 |
+
message: "#^Method GuzzleHttp\\\\RedirectMiddleware\\:\\:redirectUri\\(\\) has parameter \\$protocols with no value type specified in iterable type array\\.$#"
|
1245 |
+
count: 1
|
1246 |
+
path: src/RedirectMiddleware.php
|
1247 |
+
|
1248 |
+
-
|
1249 |
+
message: "#^Method GuzzleHttp\\\\RetryMiddleware\\:\\:__invoke\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1250 |
+
count: 1
|
1251 |
+
path: src/RetryMiddleware.php
|
1252 |
+
|
1253 |
+
-
|
1254 |
+
message: "#^Method GuzzleHttp\\\\RetryMiddleware\\:\\:onFulfilled\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1255 |
+
count: 1
|
1256 |
+
path: src/RetryMiddleware.php
|
1257 |
+
|
1258 |
+
-
|
1259 |
+
message: "#^Method GuzzleHttp\\\\RetryMiddleware\\:\\:onRejected\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1260 |
+
count: 1
|
1261 |
+
path: src/RetryMiddleware.php
|
1262 |
+
|
1263 |
+
-
|
1264 |
+
message: "#^Method GuzzleHttp\\\\RetryMiddleware\\:\\:doRetry\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#"
|
1265 |
+
count: 1
|
1266 |
+
path: src/RetryMiddleware.php
|
1267 |
+
|
1268 |
+
-
|
1269 |
+
message: "#^Method GuzzleHttp\\\\RetryMiddleware\\:\\:doRetry\\(\\) should return GuzzleHttp\\\\RetryMiddleware but returns GuzzleHttp\\\\Promise\\\\PromiseInterface\\.$#"
|
1270 |
+
count: 1
|
1271 |
+
path: src/RetryMiddleware.php
|
1272 |
+
|
1273 |
+
-
|
1274 |
+
message: "#^Property GuzzleHttp\\\\TransferStats\\:\\:\\$request has no typehint specified\\.$#"
|
1275 |
+
count: 1
|
1276 |
+
path: src/TransferStats.php
|
1277 |
+
|
1278 |
+
-
|
1279 |
+
message: "#^Property GuzzleHttp\\\\TransferStats\\:\\:\\$response has no typehint specified\\.$#"
|
1280 |
+
count: 1
|
1281 |
+
path: src/TransferStats.php
|
1282 |
+
|
1283 |
+
-
|
1284 |
+
message: "#^Property GuzzleHttp\\\\TransferStats\\:\\:\\$transferTime has no typehint specified\\.$#"
|
1285 |
+
count: 1
|
1286 |
+
path: src/TransferStats.php
|
1287 |
+
|
1288 |
+
-
|
1289 |
+
message: "#^Property GuzzleHttp\\\\TransferStats\\:\\:\\$handlerStats has no typehint specified\\.$#"
|
1290 |
+
count: 1
|
1291 |
+
path: src/TransferStats.php
|
1292 |
+
|
1293 |
+
-
|
1294 |
+
message: "#^Property GuzzleHttp\\\\TransferStats\\:\\:\\$handlerErrorData has no typehint specified\\.$#"
|
1295 |
+
count: 1
|
1296 |
+
path: src/TransferStats.php
|
1297 |
+
|
1298 |
+
-
|
1299 |
+
message: "#^Method GuzzleHttp\\\\TransferStats\\:\\:__construct\\(\\) has parameter \\$handlerStats with no value type specified in iterable type array\\.$#"
|
1300 |
+
count: 1
|
1301 |
+
path: src/TransferStats.php
|
1302 |
+
|
1303 |
+
-
|
1304 |
+
message: "#^Method GuzzleHttp\\\\TransferStats\\:\\:getHandlerStats\\(\\) return type has no value type specified in iterable type array\\.$#"
|
1305 |
+
count: 1
|
1306 |
+
path: src/TransferStats.php
|
1307 |
+
|
1308 |
+
-
|
1309 |
+
message: "#^Property GuzzleHttp\\\\UriTemplate\\:\\:\\$variables type has no value type specified in iterable type array\\.$#"
|
1310 |
+
count: 1
|
1311 |
+
path: src/UriTemplate.php
|
1312 |
+
|
1313 |
+
-
|
1314 |
+
message: "#^Property GuzzleHttp\\\\UriTemplate\\:\\:\\$operatorHash type has no value type specified in iterable type array\\.$#"
|
1315 |
+
count: 1
|
1316 |
+
path: src/UriTemplate.php
|
1317 |
+
|
1318 |
+
-
|
1319 |
+
message: "#^Property GuzzleHttp\\\\UriTemplate\\:\\:\\$delims type has no value type specified in iterable type array\\.$#"
|
1320 |
+
count: 1
|
1321 |
+
path: src/UriTemplate.php
|
1322 |
+
|
1323 |
+
-
|
1324 |
+
message: "#^Property GuzzleHttp\\\\UriTemplate\\:\\:\\$delimsPct type has no value type specified in iterable type array\\.$#"
|
1325 |
+
count: 1
|
1326 |
+
path: src/UriTemplate.php
|
1327 |
+
|
1328 |
+
-
|
1329 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:expand\\(\\) has no return typehint specified\\.$#"
|
1330 |
+
count: 1
|
1331 |
+
path: src/UriTemplate.php
|
1332 |
+
|
1333 |
+
-
|
1334 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:expand\\(\\) has parameter \\$template with no typehint specified\\.$#"
|
1335 |
+
count: 1
|
1336 |
+
path: src/UriTemplate.php
|
1337 |
+
|
1338 |
+
-
|
1339 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:expand\\(\\) has parameter \\$variables with no value type specified in iterable type array\\.$#"
|
1340 |
+
count: 1
|
1341 |
+
path: src/UriTemplate.php
|
1342 |
+
|
1343 |
+
-
|
1344 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:parseExpression\\(\\) return type has no value type specified in iterable type array\\.$#"
|
1345 |
+
count: 1
|
1346 |
+
path: src/UriTemplate.php
|
1347 |
+
|
1348 |
+
-
|
1349 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:expandMatch\\(\\) has parameter \\$matches with no value type specified in iterable type array\\.$#"
|
1350 |
+
count: 1
|
1351 |
+
path: src/UriTemplate.php
|
1352 |
+
|
1353 |
+
-
|
1354 |
+
message: "#^Method GuzzleHttp\\\\UriTemplate\\:\\:isAssoc\\(\\) has parameter \\$array with no value type specified in iterable type array\\.$#"
|
1355 |
+
count: 1
|
1356 |
+
path: src/UriTemplate.php
|
1357 |
+
|
1358 |
+
-
|
1359 |
+
message: "#^Function GuzzleHttp\\\\uri_template\\(\\) has parameter \\$variables with no value type specified in iterable type array\\.$#"
|
1360 |
+
count: 1
|
1361 |
+
path: src/functions.php
|
1362 |
+
|
1363 |
+
-
|
1364 |
+
message: "#^Function uri_template not found\\.$#"
|
1365 |
+
count: 1
|
1366 |
+
path: src/functions.php
|
1367 |
+
|
1368 |
+
-
|
1369 |
+
message: "#^Parameter \\#1 \\$str of function rtrim expects string, string\\|false given\\.$#"
|
1370 |
+
count: 1
|
1371 |
+
path: src/functions.php
|
1372 |
+
|
1373 |
+
-
|
1374 |
+
message: "#^Function GuzzleHttp\\\\headers_from_lines\\(\\) has parameter \\$lines with no value type specified in iterable type iterable\\.$#"
|
1375 |
+
count: 1
|
1376 |
+
path: src/functions.php
|
1377 |
+
|
1378 |
+
-
|
1379 |
+
message: "#^Function GuzzleHttp\\\\headers_from_lines\\(\\) return type has no value type specified in iterable type array\\.$#"
|
1380 |
+
count: 1
|
1381 |
+
path: src/functions.php
|
1382 |
+
|
1383 |
+
-
|
1384 |
+
message: "#^Function GuzzleHttp\\\\debug_resource\\(\\) should return resource but returns resource\\|false\\.$#"
|
1385 |
+
count: 1
|
1386 |
+
path: src/functions.php
|
1387 |
+
|
1388 |
+
-
|
1389 |
+
message: "#^Function GuzzleHttp\\\\normalize_header_keys\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#"
|
1390 |
+
count: 1
|
1391 |
+
path: src/functions.php
|
1392 |
+
|
1393 |
+
-
|
1394 |
+
message: "#^Function GuzzleHttp\\\\normalize_header_keys\\(\\) return type has no value type specified in iterable type array\\.$#"
|
1395 |
+
count: 1
|
1396 |
+
path: src/functions.php
|
1397 |
+
|
1398 |
+
-
|
1399 |
+
message: "#^Function GuzzleHttp\\\\is_host_in_noproxy\\(\\) has parameter \\$noProxyArray with no value type specified in iterable type array\\.$#"
|
1400 |
+
count: 1
|
1401 |
+
path: src/functions.php
|
1402 |
+
|
1403 |
+
-
|
1404 |
+
message: "#^Cannot access offset 0 on array\\<int, string\\>\\|false\\.$#"
|
1405 |
+
count: 1
|
1406 |
+
path: src/functions.php
|
1407 |
+
|
1408 |
+
-
|
1409 |
+
message: "#^Function GuzzleHttp\\\\json_encode\\(\\) should return string but returns string\\|false\\.$#"
|
1410 |
+
count: 1
|
1411 |
+
path: src/functions.php
|
1412 |
+
|
vendor/guzzlehttp/guzzle/phpstan.neon.dist
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
includes:
|
2 |
+
- phpstan-baseline.neon
|
3 |
+
|
4 |
+
parameters:
|
5 |
+
level: max
|
6 |
+
paths:
|
7 |
+
- src
|
8 |
+
bootstrap: tests/bootstrap-phpstan.php
|
vendor/guzzlehttp/guzzle/phpunit.xml.dist
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3 |
+
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
4 |
+
bootstrap="./tests/bootstrap.php"
|
5 |
+
backupGlobals="true"
|
6 |
+
colors="true"
|
7 |
+
executionOrder="random"
|
8 |
+
>
|
9 |
+
<testsuites>
|
10 |
+
<testsuite name="Test Suite">
|
11 |
+
<directory>tests</directory>
|
12 |
+
</testsuite>
|
13 |
+
</testsuites>
|
14 |
+
<filter>
|
15 |
+
<whitelist>
|
16 |
+
<directory suffix=".php">src</directory>
|
17 |
+
<exclude>
|
18 |
+
<directory suffix="Interface.php">src/</directory>
|
19 |
+
</exclude>
|
20 |
+
</whitelist>
|
21 |
+
</filter>
|
22 |
+
</phpunit>
|
vendor/guzzlehttp/psr7/.editorconfig
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
root = true
|
2 |
+
|
3 |
+
[*]
|
4 |
+
charset = utf-8
|
5 |
+
end_of_line = lf
|
6 |
+
indent_size = 4
|
7 |
+
indent_style = space
|
8 |
+
insert_final_newline = true
|
9 |
+
trim_trailing_whitespace = true
|
vendor/guzzlehttp/psr7/.gitattributes
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/tests export-ignore
|
2 |
+
.editorconfig export-ignore
|
3 |
+
.gitattributes export-ignore
|
4 |
+
.gitignore export-ignore
|
5 |
+
.travis.yml export-ignore
|
6 |
+
Makefile export-ignore
|
7 |
+
phpunit.xml.dist export-ignore
|
vendor/guzzlehttp/psr7/.gitignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
artifacts/
|
2 |
+
vendor/
|
3 |
+
composer.lock
|
4 |
+
phpunit.xml
|
vendor/guzzlehttp/psr7/.travis.yml
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: php
|
2 |
+
|
3 |
+
php:
|
4 |
+
- 5.4
|
5 |
+
- 5.5
|
6 |
+
- 5.6
|
7 |
+
- 7.0
|
8 |
+
- 7.1
|
9 |
+
- 7.2
|
10 |
+
- 7.3
|
11 |
+
- hhvm
|
12 |
+
|
13 |
+
matrix:
|
14 |
+
fast_finish: true
|
15 |
+
allow_failures:
|
16 |
+
- php: hhvm
|
17 |
+
|
18 |
+
cache:
|
19 |
+
directories:
|
20 |
+
- vendor
|
21 |
+
- $HOME/.composer/cache
|
22 |
+
|
23 |
+
install:
|
24 |
+
- travis_retry composer install --no-interaction --prefer-dist
|
25 |
+
|
26 |
+
script: make test
|
vendor/guzzlehttp/psr7/Makefile
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
all: clean test
|
2 |
+
|
3 |
+
test:
|
4 |
+
vendor/bin/phpunit $(TEST)
|
5 |
+
|
6 |
+
coverage:
|
7 |
+
vendor/bin/phpunit --coverage-html=artifacts/coverage $(TEST)
|
8 |
+
|
9 |
+
view-coverage:
|
10 |
+
open artifacts/coverage/index.html
|
11 |
+
|
12 |
+
check-tag:
|
13 |
+
$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
|
14 |
+
|
15 |
+
tag: check-tag
|
16 |
+
@echo Tagging $(TAG)
|
17 |
+
chag update $(TAG)
|
18 |
+
git commit -a -m '$(TAG) release'
|
19 |
+
chag tag
|
20 |
+
@echo "Release has been created. Push using 'make release'"
|
21 |
+
@echo "Changes made in the release commit"
|
22 |
+
git diff HEAD~1 HEAD
|
23 |
+
|
24 |
+
release: check-tag
|
25 |
+
git push origin master
|
26 |
+
git push origin $(TAG)
|
27 |
+
|
28 |
+
clean:
|
29 |
+
rm -rf artifacts/*
|
vendor/guzzlehttp/psr7/phpunit.xml.dist
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit bootstrap="tests/bootstrap.php"
|
3 |
+
colors="true">
|
4 |
+
<testsuites>
|
5 |
+
<testsuite>
|
6 |
+
<directory>tests</directory>
|
7 |
+
</testsuite>
|
8 |
+
</testsuites>
|
9 |
+
<filter>
|
10 |
+
<whitelist>
|
11 |
+
<directory suffix=".php">src</directory>
|
12 |
+
</whitelist>
|
13 |
+
</filter>
|
14 |
+
</phpunit>
|
vendor/league/flysystem-sftp/.gitattributes
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tests export-ignore
|
2 |
+
.gitattributes export-ignore
|
3 |
+
.gitignore export-ignore
|
4 |
+
.scrutinizer.yml export-ignore
|
5 |
+
.travis.yml export-ignore
|
6 |
+
changelog.md export-ignore
|
7 |
+
composer.lock export-ignore
|
8 |
+
phpunit.hhvm.xml export-ignore
|
9 |
+
phpunit.xml export-ignore
|
vendor/league/flysystem-sftp/.scrutinizer.yml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filter:
|
2 |
+
paths: [src/*]
|
3 |
+
checks:
|
4 |
+
php:
|
5 |
+
code_rating: true
|
6 |
+
remove_extra_empty_lines: true
|
7 |
+
remove_php_closing_tag: true
|
8 |
+
remove_trailing_whitespace: true
|
9 |
+
fix_use_statements:
|
10 |
+
remove_unused: true
|
11 |
+
preserve_multiple: false
|
12 |
+
preserve_blanklines: true
|
13 |
+
order_alphabetically: true
|
14 |
+
fix_php_opening_tag: true
|
15 |
+
fix_linefeed: true
|
16 |
+
fix_line_ending: true
|
17 |
+
fix_identation_4spaces: true
|
18 |
+
fix_doc_comments: true
|
19 |
+
tools:
|
20 |
+
external_code_coverage:
|
21 |
+
timeout: 600
|
22 |
+
runs: 3
|
23 |
+
php_code_coverage: false
|
24 |
+
php_code_sniffer:
|
25 |
+
config:
|
26 |
+
standard: PSR2
|
27 |
+
filter:
|
28 |
+
paths: ['src']
|
29 |
+
php_loc:
|
30 |
+
enabled: true
|
31 |
+
excluded_dirs: [vendor, spec, stubs]
|
32 |
+
php_cpd:
|
33 |
+
enabled: true
|
34 |
+
excluded_dirs: [vendor, spec, stubs]
|
vendor/league/flysystem-sftp/.travis.yml
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: php
|
2 |
+
|
3 |
+
sudo: false
|
4 |
+
|
5 |
+
cache:
|
6 |
+
directories:
|
7 |
+
- $HOME/.composer/cache
|
8 |
+
|
9 |
+
env:
|
10 |
+
matrix:
|
11 |
+
- PREFER_LOWEST="--prefer-lowest"
|
12 |
+
- PREFER_LOWEST=""
|
13 |
+
|
14 |
+
php:
|
15 |
+
- 5.6
|
16 |
+
- 7.0
|
17 |
+
- 7.1
|
18 |
+
- 7.2
|
19 |
+
|
20 |
+
install:
|
21 |
+
- composer update --no-interaction --prefer-stable $PREFER_LOWEST
|
22 |
+
|
23 |
+
script:
|
24 |
+
- vendor/bin/phpunit --verbose
|
25 |
+
|
26 |
+
after_script:
|
27 |
+
- wget https://scrutinizer-ci.com/ocular.phar
|
28 |
+
- php ocular.phar code-coverage:upload --format=php-clover coverage.xml
|
29 |
+
|
30 |
+
matrix:
|
31 |
+
fast_finish: true
|
vendor/league/flysystem-sftp/changelog.md
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Changelog
|
2 |
+
|
3 |
+
## 1.0.18 - 2019-01-07
|
4 |
+
|
5 |
+
* Throw an Exception if can't connect to check Host Fingerprint
|
6 |
+
|
7 |
+
## 1.0.17 - 2018-10-14
|
8 |
+
|
9 |
+
* Don't return visibility when not in scope
|
10 |
+
|
11 |
+
## 1.0.16 - 2018-07-08
|
12 |
+
|
13 |
+
### Altered
|
14 |
+
|
15 |
+
* Stat cache is always disabled.
|
16 |
+
|
17 |
+
## 1.0.15 - 2017-11-16
|
18 |
+
|
19 |
+
### Fixed
|
20 |
+
|
21 |
+
* Added missing `path` to read and readStream response.
|
22 |
+
* Upgraded phpunit and lost support for php <=5.5
|
23 |
+
|
24 |
+
## 1.0.14 - 2017-07-11
|
25 |
+
|
26 |
+
### Fixed
|
27 |
+
|
28 |
+
* Prevent private key exposure in php log when open_basedir restriction is in effect.
|
29 |
+
|
30 |
+
## 1.0.13 - 2016-12-08
|
31 |
+
|
32 |
+
### Fixed
|
33 |
+
|
34 |
+
* Undefined index when object type is not defined
|
35 |
+
|
36 |
+
## 1.0.12 - 2016-10-17
|
37 |
+
|
38 |
+
### Improved
|
39 |
+
|
40 |
+
* This adapter now uses the username/password getters so it uses the safe storage mechanism in the main package (1.0.29)
|
41 |
+
|
42 |
+
## 1.0.11 - 2016-10-17
|
43 |
+
|
44 |
+
### Improved
|
45 |
+
|
46 |
+
* Added a fingerprint verification.
|
47 |
+
|
48 |
+
## 1.0.9 - 2016-02-19
|
49 |
+
|
50 |
+
### Fixed
|
51 |
+
|
52 |
+
* The absolute path is now stores for better external referencing.
|
53 |
+
* When a private key is given is ca no longer trigger a warning with an open basedir restriction.
|
54 |
+
|
55 |
+
## 1.0.8 - 2015-12-08
|
56 |
+
|
57 |
+
### Fixed
|
58 |
+
|
59 |
+
* Added .gitattributes for smaller distributions.
|
60 |
+
|
61 |
+
## 1.0.7 - 2015-01-25
|
62 |
+
|
63 |
+
### Fixed
|
64 |
+
|
65 |
+
* Updated phpseclib to v 2.0.0
|
66 |
+
* Allow the connection to be injected.
|
67 |
+
|
68 |
+
## 1.0.6 - 2015-09-20
|
69 |
+
|
70 |
+
### Fixed
|
71 |
+
|
72 |
+
* [isConnected] Missing function added.
|
73 |
+
|
74 |
+
## 1.0.5 - 2015-05-26
|
75 |
+
|
76 |
+
### Fixed
|
77 |
+
|
78 |
+
* [readStream] This method no longer uses a polyfill.
|
vendor/league/flysystem-sftp/phpunit.hhvm.xml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit backupGlobals="false"
|
3 |
+
backupStaticAttributes="false"
|
4 |
+
colors="true"
|
5 |
+
convertErrorsToExceptions="true"
|
6 |
+
convertNoticesToExceptions="true"
|
7 |
+
convertWarningsToExceptions="true"
|
8 |
+
processIsolation="false"
|
9 |
+
stopOnFailure="false"
|
10 |
+
syntaxCheck="true"
|
11 |
+
verbose="true"
|
12 |
+
>
|
13 |
+
<testsuites>
|
14 |
+
<testsuite name="flysystem/tests">
|
15 |
+
<directory suffix=".php">./tests/</directory>
|
16 |
+
</testsuite>
|
17 |
+
</testsuites>
|
18 |
+
<filter>
|
19 |
+
<whitelist>
|
20 |
+
<directory suffix=".php">./src/</directory>
|
21 |
+
</whitelist>
|
22 |
+
</filter>
|
23 |
+
</phpunit>
|
vendor/league/flysystem-sftp/phpunit.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit backupGlobals="false"
|
3 |
+
backupStaticAttributes="false"
|
4 |
+
colors="true"
|
5 |
+
convertErrorsToExceptions="true"
|
6 |
+
convertNoticesToExceptions="true"
|
7 |
+
convertWarningsToExceptions="true"
|
8 |
+
processIsolation="false"
|
9 |
+
stopOnFailure="false"
|
10 |
+
syntaxCheck="true"
|
11 |
+
verbose="true"
|
12 |
+
>
|
13 |
+
<testsuites>
|
14 |
+
<testsuite name="flysystem/tests">
|
15 |
+
<directory suffix=".php">./tests/</directory>
|
16 |
+
</testsuite>
|
17 |
+
</testsuites>
|
18 |
+
<filter>
|
19 |
+
<whitelist>
|
20 |
+
<directory suffix=".php">./src/</directory>
|
21 |
+
</whitelist>
|
22 |
+
</filter>
|
23 |
+
<listeners>
|
24 |
+
<listener class="Mockery\Adapter\Phpunit\TestListener" file="./vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php"></listener>
|
25 |
+
</listeners>
|
26 |
+
<logging>
|
27 |
+
<log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/>
|
28 |
+
<log type="coverage-clover" target="coverage.xml" showUncoveredFiles="true"/>
|
29 |
+
</logging>
|
30 |
+
</phpunit>
|
vendor/league/flysystem-sftp/tests/SftpAdapterTests.php
ADDED
@@ -0,0 +1,660 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Filesystem;
|
4 |
+
use League\Flysystem\FilesystemInterface;
|
5 |
+
use League\Flysystem\Sftp\SftpAdapter as Sftp;
|
6 |
+
use League\Flysystem\Sftp\SftpAdapter;
|
7 |
+
use phpseclib\System\SSH\Agent;
|
8 |
+
use PHPUnit\Framework\TestCase;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @covers \League\Flysystem\Sftp\SftpAdapter<extended>
|
12 |
+
*/
|
13 |
+
class SftpTests extends TestCase
|
14 |
+
{
|
15 |
+
const SSH_RSA = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD05PZTxeH6GPDyxLNv7UV05jcK+Y9P8kQnpEZRHOurJVSOB4k6JBXLQtgbffuy8bFYh6mZVx40f5Za0I9mCfPel/xnCu4F1cndZBY3Ww/12rmjYOHie7k9B3h1trJ1mDhXHuiRO6vfy81jMJ9dzJyCwOK9aFGEueQ8WuPMRt9/1g3awi1O0+YZ8gTLtjKbUXLT50/GksiWDFA6DwxjLR7jFEcuPUm/WpBIKMcsbxpjKmTNaCeuoKs9TcpTwg5E311nQfk0oficgyHP/x8m6mNH5q/zOMwaRjyC6LYyBXVJgSKsh7YFf+pRyHFGpWTWKnRKXWG13NLiEKb47SydLe77';
|
16 |
+
|
17 |
+
const SSH_RSA_FINGERPRINT = '88:76:75:96:c1:26:7c:dd:9f:87:50:db:ac:c4:a8:7c';
|
18 |
+
|
19 |
+
protected function setup()
|
20 |
+
{
|
21 |
+
if (! defined('NET_SFTP_TYPE_DIRECTORY')) {
|
22 |
+
define('NET_SFTP_TYPE_DIRECTORY', 2);
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
public function adapterProvider()
|
27 |
+
{
|
28 |
+
$adapter = new Sftp(['username' => 'test', 'password' => 'test']);
|
29 |
+
$mock = Mockery::mock('phpseclib\Net\SFTP')->makePartial();
|
30 |
+
$mock->shouldReceive('__toString')->andReturn('Net_SFTP');
|
31 |
+
$mock->shouldReceive('isConnected')->andReturn(true);
|
32 |
+
$mock->shouldReceive('disconnect');
|
33 |
+
$adapter->setNetSftpConnection($mock);
|
34 |
+
$filesystem = new Filesystem($adapter);
|
35 |
+
|
36 |
+
return [
|
37 |
+
[$filesystem, $adapter, $mock],
|
38 |
+
];
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @dataProvider adapterProvider
|
43 |
+
*/
|
44 |
+
public function testHas($filesystem, $adapter, $mock)
|
45 |
+
{
|
46 |
+
$mock->shouldReceive('stat')->andReturn([
|
47 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
48 |
+
'mtime' => time(),
|
49 |
+
'size' => 20,
|
50 |
+
'permissions' => 0777,
|
51 |
+
]);
|
52 |
+
|
53 |
+
$this->assertTrue($filesystem->has('something'));
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @dataProvider adapterProvider
|
58 |
+
*/
|
59 |
+
public function testHasFail($filesystem, $adapter, $mock)
|
60 |
+
{
|
61 |
+
$mock->shouldReceive('stat')->andReturn(false);
|
62 |
+
|
63 |
+
$this->assertFalse($filesystem->has('something'));
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @dataProvider adapterProvider
|
68 |
+
*/
|
69 |
+
public function testWrite($filesystem, $adapter, $mock)
|
70 |
+
{
|
71 |
+
$mock->shouldReceive('put')->andReturn(true, false);
|
72 |
+
$mock->shouldReceive('stat')->andReturn(false);
|
73 |
+
$mock->shouldReceive('chmod')->andReturn(true);
|
74 |
+
$this->assertTrue($filesystem->write('something', 'something', ['visibility' => 'public']));
|
75 |
+
$this->assertFalse($filesystem->write('something_else.txt', 'else'));
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @dataProvider adapterProvider
|
80 |
+
*/
|
81 |
+
public function testWriteStream($filesystem, $adapter, $mock)
|
82 |
+
{
|
83 |
+
$stream = tmpfile();
|
84 |
+
$mock->shouldReceive('put')->andReturn(true, false);
|
85 |
+
$mock->shouldReceive('stat')->andReturn(false);
|
86 |
+
$mock->shouldReceive('chmod')->andReturn(true);
|
87 |
+
$this->assertTrue($filesystem->writeStream('something', $stream, ['visibility' => 'public']));
|
88 |
+
$this->assertFalse($filesystem->writeStream('something_else.txt', $stream));
|
89 |
+
fclose($stream);
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @dataProvider adapterProvider
|
94 |
+
*/
|
95 |
+
public function testDelete($filesystem, $adapter, $mock)
|
96 |
+
{
|
97 |
+
$mock->shouldReceive('delete')->andReturn(true, false);
|
98 |
+
$mock->shouldReceive('stat')->andReturn([
|
99 |
+
'type' => 1,
|
100 |
+
'mtime' => time(),
|
101 |
+
'size' => 20,
|
102 |
+
'permissions' => 0777,
|
103 |
+
]);
|
104 |
+
$this->assertTrue($filesystem->delete('something'));
|
105 |
+
$this->assertFalse($filesystem->delete('something_else.txt'));
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* @dataProvider adapterProvider
|
110 |
+
*/
|
111 |
+
public function testUpdate(FilesystemInterface $filesystem, $adapter, $mock)
|
112 |
+
{
|
113 |
+
$mock->shouldReceive('put')->andReturn(true, false);
|
114 |
+
$mock->shouldReceive('stat')->andReturn([
|
115 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
116 |
+
'mtime' => time(),
|
117 |
+
'size' => 20,
|
118 |
+
'permissions' => 0777,
|
119 |
+
]);
|
120 |
+
$this->assertTrue($filesystem->update('something', 'something'));
|
121 |
+
$this->assertFalse($filesystem->update('something_else.txt', 'else'));
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @dataProvider adapterProvider
|
126 |
+
*/
|
127 |
+
public function testUpdateStream(FilesystemInterface $filesystem, $adapter, $mock)
|
128 |
+
{
|
129 |
+
$stream = tmpfile();
|
130 |
+
$mock->shouldReceive('put')->andReturn(true, false);
|
131 |
+
$mock->shouldReceive('stat')->andReturn([
|
132 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
133 |
+
'mtime' => time(),
|
134 |
+
'size' => 20,
|
135 |
+
'permissions' => 0777,
|
136 |
+
]);
|
137 |
+
$this->assertTrue($filesystem->updateStream('something', $stream));
|
138 |
+
$this->assertFalse($filesystem->updateStream('something_else.txt', $stream));
|
139 |
+
fclose($stream);
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* @dataProvider adapterProvider
|
144 |
+
*/
|
145 |
+
public function testSetVisibility($filesystem, $adapter, $mock)
|
146 |
+
{
|
147 |
+
$mock->shouldReceive('stat')->andReturn([
|
148 |
+
'type' => 1, // file
|
149 |
+
'mtime' => time(),
|
150 |
+
'size' => 20,
|
151 |
+
'permissions' => 0777,
|
152 |
+
]);
|
153 |
+
$mock->shouldReceive('chmod')->twice()->andReturn(true, false);
|
154 |
+
$this->assertTrue($filesystem->setVisibility('something', 'public'));
|
155 |
+
$this->assertFalse($filesystem->setVisibility('something', 'public'));
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* @dataProvider adapterProvider
|
160 |
+
* @expectedException InvalidArgumentException
|
161 |
+
*/
|
162 |
+
public function testSetVisibilityInvalid($filesystem, $adapter, $mock)
|
163 |
+
{
|
164 |
+
$mock->shouldReceive('stat')->andReturn([
|
165 |
+
'type' => 1, // file
|
166 |
+
'mtime' => time(),
|
167 |
+
'size' => 20,
|
168 |
+
'permissions' => 0777,
|
169 |
+
]);
|
170 |
+
$mock->shouldReceive('stat')->once()->andReturn(true);
|
171 |
+
$filesystem->setVisibility('something', 'invalid');
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* @dataProvider adapterProvider
|
176 |
+
*/
|
177 |
+
public function testRename($filesystem, $adapter, $mock)
|
178 |
+
{
|
179 |
+
$mock->shouldReceive('stat')->andReturn([
|
180 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
181 |
+
'mtime' => time(),
|
182 |
+
'size' => 20,
|
183 |
+
'permissions' => 0777,
|
184 |
+
], false);
|
185 |
+
$mock->shouldReceive('rename')->andReturn(true);
|
186 |
+
$result = $filesystem->rename('old', 'new');
|
187 |
+
$this->assertTrue($result);
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* @dataProvider adapterProvider
|
192 |
+
*/
|
193 |
+
public function testDeleteDir($filesystem, $adapter, $mock)
|
194 |
+
{
|
195 |
+
$mock->shouldReceive('delete')->with('some/dirname', true)->andReturn(true);
|
196 |
+
$result = $filesystem->deleteDir('some/dirname');
|
197 |
+
$this->assertTrue($result);
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* @dataProvider adapterProvider
|
202 |
+
*/
|
203 |
+
public function testListContents($filesystem, $adapter, $mock)
|
204 |
+
{
|
205 |
+
$mock->shouldReceive('rawlist')->andReturn(false, [
|
206 |
+
'.' => [],
|
207 |
+
'dirname' => [
|
208 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
209 |
+
'mtime' => time(),
|
210 |
+
'size' => 20,
|
211 |
+
'permissions' => 0777,
|
212 |
+
],
|
213 |
+
], [
|
214 |
+
'..' => [],
|
215 |
+
'dirname' => [
|
216 |
+
'type' => 1,
|
217 |
+
'mtime' => time(),
|
218 |
+
'size' => 20,
|
219 |
+
'permissions' => 0777,
|
220 |
+
],
|
221 |
+
]);
|
222 |
+
$listing = $adapter->listContents('', true);
|
223 |
+
$this->assertInternalType('array', $listing);
|
224 |
+
$listing = $adapter->listContents('', true);
|
225 |
+
$this->assertInternalType('array', $listing);
|
226 |
+
$this->assertCount(2, $listing);
|
227 |
+
}
|
228 |
+
|
229 |
+
public function methodProvider()
|
230 |
+
{
|
231 |
+
$resources = $this->adapterProvider();
|
232 |
+
list($filesystem, $adapter, $mock) = reset($resources);
|
233 |
+
|
234 |
+
return [
|
235 |
+
[$filesystem, $adapter, $mock, 'getMetadata', 'array'],
|
236 |
+
[$filesystem, $adapter, $mock, 'getTimestamp', 'integer'],
|
237 |
+
[$filesystem, $adapter, $mock, 'getVisibility', 'string'],
|
238 |
+
[$filesystem, $adapter, $mock, 'getSize', 'integer'],
|
239 |
+
];
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* @dataProvider methodProvider
|
244 |
+
*/
|
245 |
+
public function testMetaMethods($filesystem, $adapter, $mock, $method, $type)
|
246 |
+
{
|
247 |
+
$mock->shouldReceive('stat')->andReturn([
|
248 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
249 |
+
'mtime' => time(),
|
250 |
+
'size' => 20,
|
251 |
+
'permissions' => 0777,
|
252 |
+
]);
|
253 |
+
$result = $filesystem->{$method}(uniqid().'object.ext');
|
254 |
+
$this->assertInternalType($type, $result);
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* @dataProvider adapterProvider
|
259 |
+
*/
|
260 |
+
public function testGetVisibility($filesystem, $adapter, $mock)
|
261 |
+
{
|
262 |
+
$mock->shouldReceive('stat')->andReturn([
|
263 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
264 |
+
'mtime' => time(),
|
265 |
+
'size' => 20,
|
266 |
+
'permissions' => 0777,
|
267 |
+
]);
|
268 |
+
$result = $adapter->getVisibility(uniqid().'object.ext');
|
269 |
+
$this->assertInternalType('array', $result);
|
270 |
+
$result = $result['visibility'];
|
271 |
+
$this->assertInternalType('string', $result);
|
272 |
+
$this->assertEquals('public', $result);
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* @dataProvider adapterProvider
|
277 |
+
*/
|
278 |
+
public function testGetTimestamp($filesystem, $adapter, $mock)
|
279 |
+
{
|
280 |
+
$mock->shouldReceive('stat')->andReturn([
|
281 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
282 |
+
'mtime' => $time = time(),
|
283 |
+
'size' => 20,
|
284 |
+
'permissions' => 0777,
|
285 |
+
]);
|
286 |
+
$result = $adapter->getTimestamp('object.ext');
|
287 |
+
$this->assertInternalType('array', $result);
|
288 |
+
$result = $result['timestamp'];
|
289 |
+
$this->assertInternalType('integer', $result);
|
290 |
+
$this->assertEquals($time, $result);
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* @dataProvider adapterProvider
|
295 |
+
*/
|
296 |
+
public function testCreateDir($filesystem, $adapter, $mock)
|
297 |
+
{
|
298 |
+
$directoryPerm = 12345;
|
299 |
+
$adapter->setDirectoryPerm($directoryPerm);
|
300 |
+
$mock->shouldReceive('mkdir')->once()->with('dirname', $directoryPerm, true)->andReturn(true);
|
301 |
+
$mock->shouldReceive('mkdir')->once()->with('dirname_fails', $directoryPerm, true)->andReturn(false);
|
302 |
+
$this->assertTrue($filesystem->createDir('dirname'));
|
303 |
+
$this->assertFalse($filesystem->createDir('dirname_fails'));
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* @dataProvider adapterProvider
|
308 |
+
*/
|
309 |
+
public function testRead($filesystem, $adapter, $mock)
|
310 |
+
{
|
311 |
+
$mock->shouldReceive('stat')->andReturn([
|
312 |
+
'type' => 1,
|
313 |
+
'mtime' => time(),
|
314 |
+
'size' => 20,
|
315 |
+
'permissions' => 0777,
|
316 |
+
]);
|
317 |
+
$mock->shouldReceive('get')->andReturn('file contents', false);
|
318 |
+
$result = $filesystem->read('some.file');
|
319 |
+
$this->assertInternalType('string', $result);
|
320 |
+
$this->assertEquals('file contents', $result);
|
321 |
+
$this->assertFalse($filesystem->read('other.file'));
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* @dataProvider adapterProvider
|
326 |
+
*/
|
327 |
+
public function testReadStream($filesystem, $adapter, $mock)
|
328 |
+
{
|
329 |
+
$stream = tmpfile();
|
330 |
+
fwrite($stream, 'something');
|
331 |
+
$mock->shouldReceive('get')->andReturn($stream, false);
|
332 |
+
$result = $adapter->readStream('something');
|
333 |
+
$this->assertInternalType('array', $result);
|
334 |
+
$this->assertArrayHasKey('stream', $result);
|
335 |
+
$this->assertInternalType('resource', $result['stream']);
|
336 |
+
$this->assertFalse($adapter->readStream('something'));
|
337 |
+
fclose($stream);
|
338 |
+
}
|
339 |
+
|
340 |
+
/**
|
341 |
+
* @dataProvider adapterProvider
|
342 |
+
*/
|
343 |
+
public function testGetMimetype($filesystem, $adapter, $mock)
|
344 |
+
{
|
345 |
+
$mock->shouldReceive('stat')->andReturn([
|
346 |
+
'type' => 1,
|
347 |
+
'mtime' => time(),
|
348 |
+
'size' => 20,
|
349 |
+
'permissions' => 0777,
|
350 |
+
]);
|
351 |
+
|
352 |
+
$mock->shouldReceive('get')->andReturn('file contents', false);
|
353 |
+
$result = $filesystem->getMimetype('some.file');
|
354 |
+
$this->assertInternalType('string', $result);
|
355 |
+
$this->assertEquals('text/plain', $result);
|
356 |
+
$this->assertFalse($filesystem->getMimetype('some.file'));
|
357 |
+
}
|
358 |
+
|
359 |
+
/**
|
360 |
+
* @dataProvider adapterProvider
|
361 |
+
*/
|
362 |
+
public function testPrivateKeySetGet($filesystem, $adapter, $mock)
|
363 |
+
{
|
364 |
+
$key = 'private.key';
|
365 |
+
$this->assertEquals($adapter, $adapter->setPrivateKey($key));
|
366 |
+
$this->assertInstanceOf('phpseclib\Crypt\RSA', $adapter->getPrivateKey());
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* @dataProvider adapterProvider
|
371 |
+
*/
|
372 |
+
public function testAgentSetGet($filesystem, SftpAdapter $adapter, $mock)
|
373 |
+
{
|
374 |
+
if (!isset($_SERVER['SSH_AUTH_SOCK'])) {
|
375 |
+
$this->markTestSkipped('This test requires an SSH Agent (SSH_AUTH_SOCK env variable).');
|
376 |
+
}
|
377 |
+
|
378 |
+
$this->assertEquals($adapter, $adapter->setUseAgent(true));
|
379 |
+
$this->assertInstanceOf('phpseclib\System\SSH\Agent', $adapter->getAuthentication());
|
380 |
+
$this->assertSame($adapter->getAgent(), $adapter->getAgent());
|
381 |
+
|
382 |
+
$agent = new Agent;
|
383 |
+
$adapter->setAgent($agent);
|
384 |
+
$this->assertEquals($agent, $agent);
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* @dataProvider adapterProvider
|
389 |
+
*/
|
390 |
+
public function testPrivateKeyFileSetGet($filesystem, $adapter, $mock)
|
391 |
+
{
|
392 |
+
file_put_contents($key = __DIR__.'/some.key', 'key contents');
|
393 |
+
$this->assertEquals($adapter, $adapter->setPrivateKey($key));
|
394 |
+
$this->assertInstanceOf('phpseclib\Crypt\RSA', $adapter->getPrivateKey());
|
395 |
+
@unlink($key);
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* @dataProvider adapterProvider
|
400 |
+
*/
|
401 |
+
public function testDirectoryPermSetGet($filesystem, $adapter, $mock)
|
402 |
+
{
|
403 |
+
$directoryPerm = 12345;
|
404 |
+
$this->assertEquals($adapter, $adapter->setDirectoryPerm($directoryPerm));
|
405 |
+
$this->assertEquals($directoryPerm, $adapter->getDirectoryPerm());
|
406 |
+
}
|
407 |
+
|
408 |
+
/**
|
409 |
+
* @dataProvider adapterProvider
|
410 |
+
*/
|
411 |
+
public function testConnect($filesystem, $adapter, $mock)
|
412 |
+
{
|
413 |
+
$adapter->setNetSftpConnection($mock);
|
414 |
+
$mock->shouldReceive('login')->with('test', 'test')->andReturn(true);
|
415 |
+
$mock->shouldReceive('disableStatCache');
|
416 |
+
$adapter->connect();
|
417 |
+
}
|
418 |
+
|
419 |
+
/**
|
420 |
+
* @dataProvider adapterProvider
|
421 |
+
*/
|
422 |
+
public function testConnectWithAgent($filesystem, SftpAdapter $adapter, $mock)
|
423 |
+
{
|
424 |
+
if (!isset($_SERVER['SSH_AUTH_SOCK'])) {
|
425 |
+
$this->markTestSkipped('This test requires an SSH Agent (SSH_AUTH_SOCK env variable).');
|
426 |
+
}
|
427 |
+
|
428 |
+
$agent = new Agent;
|
429 |
+
$adapter->setUseAgent(true);
|
430 |
+
$adapter->setAgent($agent);
|
431 |
+
$adapter->setNetSftpConnection($mock);
|
432 |
+
$mock->shouldReceive('login')->with('test', $agent)->andReturn(true);
|
433 |
+
$adapter->connect();
|
434 |
+
$this->assertEquals(Agent::FORWARD_REQUEST, $agent->forward_status);
|
435 |
+
}
|
436 |
+
|
437 |
+
/**
|
438 |
+
* @dataProvider adapterProvider
|
439 |
+
*/
|
440 |
+
public function testGetPasswordWithKey($filesystem, SftpAdapter $adapter, $mock)
|
441 |
+
{
|
442 |
+
$key = 'private.key';
|
443 |
+
$this->assertEquals($adapter, $adapter->setPrivateKey($key));
|
444 |
+
$this->assertInstanceOf('phpseclib\Crypt\RSA', $adapter->getAuthentication());
|
445 |
+
}
|
446 |
+
|
447 |
+
/**
|
448 |
+
* @dataProvider adapterProvider
|
449 |
+
* @expectedException LogicException
|
450 |
+
*/
|
451 |
+
public function testLoginFail($filesystem, $adapter, $mock)
|
452 |
+
{
|
453 |
+
$adapter->setNetSftpConnection($mock);
|
454 |
+
$mock->shouldReceive('login')->with('test', 'test')->andReturn(false);
|
455 |
+
$adapter->connect();
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* @dataProvider adapterProvider
|
460 |
+
*
|
461 |
+
* @param $filesystem
|
462 |
+
* @param SftpAdapter $adapter
|
463 |
+
* @param $mock
|
464 |
+
*/
|
465 |
+
public function testIsConnected($filesystem, SftpAdapter $adapter, $mock)
|
466 |
+
{
|
467 |
+
$adapter->setNetSftpConnection($mock);
|
468 |
+
$mock->shouldReceive('isConnected')->andReturn(true);
|
469 |
+
$this->assertTrue($adapter->isConnected());
|
470 |
+
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* @dataProvider adapterProvider
|
474 |
+
*
|
475 |
+
* @param $filesystem
|
476 |
+
* @param SftpAdapter $adapter
|
477 |
+
*/
|
478 |
+
public function testIsNotConnected($filesystem, SftpAdapter $adapter)
|
479 |
+
{
|
480 |
+
$mock = Mockery::mock('phpseclib\Net\SFTP');
|
481 |
+
$mock->shouldReceive('__toString')->andReturn('Net_SFTP');
|
482 |
+
$mock->shouldReceive('disconnect');
|
483 |
+
$mock->shouldReceive('isConnected')->andReturn(false);
|
484 |
+
$adapter->setNetSftpConnection($mock);
|
485 |
+
$this->assertFalse($adapter->isConnected());
|
486 |
+
}
|
487 |
+
|
488 |
+
/**
|
489 |
+
* @dataProvider adapterProvider
|
490 |
+
*/
|
491 |
+
public function testConnectWithRoot($filesystem, $adapter, $mock)
|
492 |
+
{
|
493 |
+
$adapter->setRoot('/root');
|
494 |
+
$adapter->setNetSftpConnection($mock);
|
495 |
+
$mock->shouldReceive('login')->with('test', 'test')->andReturn(true);
|
496 |
+
$mock->shouldReceive('chdir')->with('/root/')->andReturn(true);
|
497 |
+
$adapter->connect();
|
498 |
+
$adapter->disconnect();
|
499 |
+
}
|
500 |
+
|
501 |
+
/**
|
502 |
+
* @dataProvider adapterProvider
|
503 |
+
* @expectedException RuntimeException
|
504 |
+
*/
|
505 |
+
public function testConnectWithInvalidRoot($filesystem, $adapter, $mock)
|
506 |
+
{
|
507 |
+
$adapter->setRoot('/root');
|
508 |
+
$adapter->setNetSftpConnection($mock);
|
509 |
+
$mock->shouldReceive('login')->with('test', 'test')->andReturn(true);
|
510 |
+
$mock->shouldReceive('chdir')->with('/root/')->andReturn(false);
|
511 |
+
$adapter->connect();
|
512 |
+
}
|
513 |
+
|
514 |
+
/**
|
515 |
+
* @dataProvider adapterProvider
|
516 |
+
*/
|
517 |
+
public function testListContentsDir($filesystem, $adapter, $mock)
|
518 |
+
{
|
519 |
+
$mock
|
520 |
+
->shouldReceive('rawlist')
|
521 |
+
->andReturn(
|
522 |
+
[
|
523 |
+
'dirname' =>
|
524 |
+
[
|
525 |
+
'type' => NET_SFTP_TYPE_DIRECTORY,
|
526 |
+
'mtime' => time(),
|
527 |
+
'permissions' => 0777,
|
528 |
+
'filename' => 'dirname'
|
529 |
+
],
|
530 |
+
'filename' =>
|
531 |
+
[
|
532 |
+
'mtime' => time(),
|
533 |
+
'size' => 20,
|
534 |
+
'permissions' => 0777,
|
535 |
+
'filename' => 'filename'
|
536 |
+
],
|
537 |
+
]
|
538 |
+
);
|
539 |
+
|
540 |
+
$listing = $filesystem->listContents('');
|
541 |
+
$this->assertInternalType('array', $listing);
|
542 |
+
$this->assertCount(2, $listing);
|
543 |
+
}
|
544 |
+
|
545 |
+
public function testNetSftpConnectionSetter()
|
546 |
+
{
|
547 |
+
$settings = [
|
548 |
+
'NetSftpConnection' => $mock = Mockery::mock('phpseclib\Net\SFTP'),
|
549 |
+
];
|
550 |
+
|
551 |
+
$mock->shouldReceive('isConnected')->andReturn(true);
|
552 |
+
$mock->shouldReceive('disconnect');
|
553 |
+
|
554 |
+
$adapter = new Sftp($settings);
|
555 |
+
$this->assertEquals($mock, $adapter->getConnection());
|
556 |
+
}
|
557 |
+
|
558 |
+
public function testHostFingerprintIsVerifiedIfProvided ()
|
559 |
+
{
|
560 |
+
$adapter = new SftpAdapter([
|
561 |
+
'host' => 'example.org',
|
562 |
+
'username' => 'user',
|
563 |
+
'password' => '123456',
|
564 |
+
'hostFingerprint' => self::SSH_RSA_FINGERPRINT,
|
565 |
+
]);
|
566 |
+
|
567 |
+
$connection = Mockery::mock('phpseclib\Net\SFTP');
|
568 |
+
$connection->shouldReceive('getServerPublicHostKey')
|
569 |
+
->andReturn(self::SSH_RSA);
|
570 |
+
$connection->shouldReceive('login')
|
571 |
+
->with('user', '123456')
|
572 |
+
->andReturn(TRUE);
|
573 |
+
$connection->shouldReceive('disableStatCache');
|
574 |
+
$connection->shouldReceive('disconnect');
|
575 |
+
|
576 |
+
$adapter->setNetSftpConnection($connection);
|
577 |
+
|
578 |
+
$adapter->connect();
|
579 |
+
}
|
580 |
+
|
581 |
+
public function testHostFingerprintNotIsVerifiedIfNotProvided ()
|
582 |
+
{
|
583 |
+
$adapter = new SftpAdapter([
|
584 |
+
'host' => 'example.org',
|
585 |
+
'username' => 'user',
|
586 |
+
'password' => '123456',
|
587 |
+
]);
|
588 |
+
|
589 |
+
$connection = Mockery::mock('phpseclib\Net\SFTP');
|
590 |
+
|
591 |
+
$connection->shouldReceive('getServerPublicHostKey')
|
592 |
+
->never();
|
593 |
+
$connection->shouldReceive('login')
|
594 |
+
->with('user', '123456')
|
595 |
+
->andReturn(TRUE);
|
596 |
+
$connection->shouldReceive('disableStatCache');
|
597 |
+
$connection->shouldReceive('disconnect');
|
598 |
+
$adapter->setNetSftpConnection($connection);
|
599 |
+
|
600 |
+
$adapter->connect();
|
601 |
+
}
|
602 |
+
|
603 |
+
/**
|
604 |
+
* @expectedException LogicException
|
605 |
+
* @expectedExceptionMessage The authenticity of host example.org can't be established.
|
606 |
+
*/
|
607 |
+
public function testMisMatchingHostFingerprintAbortsLogin ()
|
608 |
+
{
|
609 |
+
$adapter = new SftpAdapter([
|
610 |
+
'host' => 'example.org',
|
611 |
+
'username' => 'user',
|
612 |
+
'password' => '123456',
|
613 |
+
'hostFingerprint' => '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00',
|
614 |
+
]);
|
615 |
+
|
616 |
+
$connection = Mockery::mock('phpseclib\Net\SFTP');
|
617 |
+
|
618 |
+
$connection->shouldReceive('getServerPublicHostKey')
|
619 |
+
->andReturn(self::SSH_RSA);
|
620 |
+
|
621 |
+
$connection->shouldReceive('login')
|
622 |
+
->never();
|
623 |
+
|
624 |
+
$connection->shouldReceive('disableStatCache');
|
625 |
+
$connection->shouldReceive('disconnect');
|
626 |
+
|
627 |
+
$adapter->setNetSftpConnection($connection);
|
628 |
+
|
629 |
+
$adapter->connect();
|
630 |
+
}
|
631 |
+
|
632 |
+
/**
|
633 |
+
* @expectedException LogicException
|
634 |
+
* @expectedExceptionMessage Could not connect to server to verify public key.
|
635 |
+
*/
|
636 |
+
public function testCantConnectToCheckHostFingerprintAbortsLogin()
|
637 |
+
{
|
638 |
+
$adapter = new SftpAdapter([
|
639 |
+
'host' => 'example.org',
|
640 |
+
'username' => 'user',
|
641 |
+
'password' => '123456',
|
642 |
+
'hostFingerprint' => '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00',
|
643 |
+
]);
|
644 |
+
|
645 |
+
$connection = Mockery::mock('phpseclib\Net\SFTP');
|
646 |
+
|
647 |
+
$connection->shouldReceive('getServerPublicHostKey')
|
648 |
+
->andReturn(false); // getServerPublicHostKey returns false if it cant connect.
|
649 |
+
|
650 |
+
$connection->shouldReceive('login')
|
651 |
+
->never();
|
652 |
+
|
653 |
+
$connection->shouldReceive('disableStatCache');
|
654 |
+
$connection->shouldReceive('disconnect');
|
655 |
+
|
656 |
+
$adapter->setNetSftpConnection($connection);
|
657 |
+
|
658 |
+
$adapter->connect();
|
659 |
+
}
|
660 |
+
}
|
vendor/league/flysystem/.appveyor.yml
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
build: false
|
2 |
+
|
3 |
+
platform:
|
4 |
+
- x64
|
5 |
+
|
6 |
+
clone_folder: c:\projects\project-code
|
7 |
+
|
8 |
+
cache:
|
9 |
+
- c:\ProgramData\chocolatey\bin -> .appveyor.yml
|
10 |
+
- c:\ProgramData\chocolatey\lib -> .appveyor.yml
|
11 |
+
- c:\ProgramData\ComposerSetup -> .appveyor.yml
|
12 |
+
- c:\tools\php -> .appveyor.yml
|
13 |
+
|
14 |
+
environment:
|
15 |
+
global:
|
16 |
+
COMPOSER_NO_INTERACTION: 1
|
17 |
+
ANSICON: 121x90 (121x90) # Console colors
|
18 |
+
|
19 |
+
matrix:
|
20 |
+
- PHP_VERSION: 5.6
|
21 |
+
COMPOSER_OPTS: --prefer-lowest
|
22 |
+
|
23 |
+
- PHP_VERSION: 5.6
|
24 |
+
COMPOSER_OPTS:
|
25 |
+
|
26 |
+
- PHP_VERSION: 7.2
|
27 |
+
COMPOSER_OPTS: --prefer-lowest
|
28 |
+
|
29 |
+
- PHP_VERSION: 7.2
|
30 |
+
COMPOSER_OPTS:
|
31 |
+
|
32 |
+
init:
|
33 |
+
- ps: $env:PATH = 'c:\tools\php;c:\ProgramData\ComposerSetup\bin;' + $env:PATH
|
34 |
+
|
35 |
+
install:
|
36 |
+
- ps: Set-Service wuauserv -StartupType Manual # Chocolatey will try to install Windows updates when installing PHP.
|
37 |
+
- ps: appveyor-retry cinst --no-progress --params '""/InstallDir:c:\tools\php""' -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $env:PHP_VERSION | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','')
|
38 |
+
|
39 |
+
- cd c:\tools\php
|
40 |
+
- copy php.ini-production php.ini /Y
|
41 |
+
- echo date.timezone="UTC" >> php.ini
|
42 |
+
- echo extension_dir=ext >> php.ini
|
43 |
+
- echo extension=php_openssl.dll >> php.ini # Needed to install Composer
|
44 |
+
- echo extension=php_mbstring.dll >> php.ini # Needed for PHPunit
|
45 |
+
- echo extension=php_fileinfo.dll >> php.ini
|
46 |
+
|
47 |
+
- appveyor-retry cinst --no-progress -y composer
|
48 |
+
|
49 |
+
- cd c:\projects\project-code
|
50 |
+
- appveyor-retry composer self-update
|
51 |
+
- appveyor-retry composer update --no-interaction --no-progress --no-suggest --optimize-autoloader --prefer-stable --prefer-dist %COMPOSER_OPTS%
|
52 |
+
|
53 |
+
test_script:
|
54 |
+
- cd c:\projects\project-code
|
55 |
+
- bin\phpunit --verbose --exclude-group=integration
|
56 |
+
- bin/phpspec run
|
vendor/league/flysystem/.gitattributes
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
* text=auto
|
2 |
+
|
3 |
+
/build export-ignore
|
4 |
+
/.github export-ignore
|
5 |
+
/docs export-ignore
|
6 |
+
/spec export-ignore
|
7 |
+
/stub export-ignore
|
8 |
+
/tests export-ignore
|
9 |
+
/.gitattributes export-ignore
|
10 |
+
/.gitignore export-ignore
|
11 |
+
/.php_cs export-ignore
|
12 |
+
/.scrutinizer.yml export-ignore
|
13 |
+
/.travis.yml export-ignore
|
14 |
+
/.appveyor.yml export-ignore
|
15 |
+
/phpunit.php export-ignore
|
16 |
+
/phpspec.yml export-ignore
|
17 |
+
/phpunit.xml export-ignore
|
18 |
+
/changelog.md export-ignore
|
19 |
+
/README.md export-ignore
|
20 |
+
/wait_for_ftp_service.php export-ignore
|
vendor/league/flysystem/.github/ISSUE_TEMPLATE/Bug.md
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: 🐛 Bug
|
3 |
+
about: Did you encounter a bug?
|
4 |
+
---
|
5 |
+
|
6 |
+
### Bug Report
|
7 |
+
|
8 |
+
<!-- Fill in the relevant information below to help triage your issue. -->
|
9 |
+
|
10 |
+
| Q | A
|
11 |
+
|------------ | ------
|
12 |
+
| BC Break | yes
|
13 |
+
| Version | x.y.z
|
14 |
+
|
15 |
+
#### Summary
|
16 |
+
|
17 |
+
<!-- Provide a summary desciribing the problem you are experiencing. -->
|
18 |
+
|
19 |
+
#### How to reproduce
|
20 |
+
|
21 |
+
<!--
|
22 |
+
Provide steps to reproduce the issue.
|
23 |
+
If possible, also add a code snippet.
|
24 |
+
-->
|
vendor/league/flysystem/.github/ISSUE_TEMPLATE/Feature_Request.md
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: 🎉 Feature Request
|
3 |
+
about: Do you have a new feature in mind?
|
4 |
+
---
|
5 |
+
|
6 |
+
### Feature Request
|
7 |
+
|
8 |
+
<!-- Fill in the relevant information below to help triage your issue. -->
|
9 |
+
|
10 |
+
| Q | A
|
11 |
+
|------------ | ------
|
12 |
+
| New Feature | yes
|
13 |
+
| BC Break | yes/no
|
14 |
+
|
15 |
+
#### Scenario
|
16 |
+
|
17 |
+
<!-- Provide an explain in which scenario the feature would be helpful. -->
|
18 |
+
|
19 |
+
#### Summary
|
20 |
+
|
21 |
+
<!-- Provide a summary of the feature you would like to see implemented. -->
|
vendor/league/flysystem/.github/ISSUE_TEMPLATE/Question.md
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: ❓ Question
|
3 |
+
about: Are you unsure about something?
|
4 |
+
---
|
5 |
+
|
6 |
+
### Question
|
7 |
+
|
8 |
+
<!-- Fill in the relevant information below to help triage your issue. -->
|
9 |
+
|
10 |
+
| Q | A
|
11 |
+
|------------ | ------
|
12 |
+
| Version | x.y.z
|
vendor/league/flysystem/.php_cs
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
return Symfony\CS\Config\Config::create()
|
4 |
+
->level(Symfony\CS\FixerInterface::PSR2_LEVEL)
|
5 |
+
->fixers([
|
6 |
+
'phpdoc_params',
|
7 |
+
'phpdoc_indent',
|
8 |
+
'phpdoc_no_access',
|
9 |
+
'phpdoc_no_package',
|
10 |
+
'phpdoc_params',
|
11 |
+
'phpdoc_scalar',
|
12 |
+
'phpdoc_separation',
|
13 |
+
'phpdoc_short_description',
|
14 |
+
'phpdoc_to_comment',
|
15 |
+
'phpdoc_trim',
|
16 |
+
'phpdoc_type_to_var',
|
17 |
+
'operators_spaces',
|
18 |
+
'ordered_use',
|
19 |
+
'short_array_syntax',
|
20 |
+
'return',
|
21 |
+
'spaces_before_semicolon',
|
22 |
+
'spaces_cast',
|
23 |
+
'ternary_spaces',
|
24 |
+
'eof_ending',
|
25 |
+
'logical_not_operators_with_spaces',
|
26 |
+
'concat_with_spaces',
|
27 |
+
])
|
28 |
+
->finder(Symfony\CS\Finder\DefaultFinder::create()
|
29 |
+
->in(__DIR__.'/src')
|
30 |
+
->in(__DIR__.'/tests')
|
31 |
+
->in(__DIR__.'/stub'));
|
vendor/league/flysystem/.scrutinizer.yml
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filter:
|
2 |
+
paths: [src/*]
|
3 |
+
excluded_paths: [bin/*, spec/*, tests/*, stub/*, coverage/*]
|
4 |
+
checks:
|
5 |
+
php:
|
6 |
+
code_rating: true
|
7 |
+
remove_extra_empty_lines: true
|
8 |
+
remove_php_closing_tag: true
|
9 |
+
remove_trailing_whitespace: true
|
10 |
+
fix_use_statements:
|
11 |
+
remove_unused: true
|
12 |
+
preserve_multiple: false
|
13 |
+
preserve_blanklines: true
|
14 |
+
order_alphabetically: true
|
15 |
+
fix_php_opening_tag: true
|
16 |
+
fix_linefeed: true
|
17 |
+
fix_line_ending: true
|
18 |
+
fix_identation_4spaces: true
|
19 |
+
fix_doc_comments: true
|
20 |
+
tools:
|
21 |
+
external_code_coverage:
|
22 |
+
timeout: 1200
|
23 |
+
runs: 3
|
24 |
+
php_code_coverage: false
|
25 |
+
php_code_sniffer:
|
26 |
+
config:
|
27 |
+
standard: PSR2
|
28 |
+
filter:
|
29 |
+
paths: ['src']
|
30 |
+
php_loc:
|
31 |
+
enabled: true
|
32 |
+
excluded_dirs: [vendor, spec, stubs]
|
33 |
+
php_sim: false
|
vendor/league/flysystem/.travis.yml
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
sudo: required
|
2 |
+
services:
|
3 |
+
- docker
|
4 |
+
|
5 |
+
language: php
|
6 |
+
|
7 |
+
php:
|
8 |
+
- 5.5
|
9 |
+
- 5.6
|
10 |
+
- 7.0
|
11 |
+
- 7.1
|
12 |
+
- 7.2
|
13 |
+
- 7.3
|
14 |
+
|
15 |
+
matrix:
|
16 |
+
allow_failures:
|
17 |
+
- php: 5.5
|
18 |
+
|
19 |
+
sudo: false
|
20 |
+
|
21 |
+
env:
|
22 |
+
- COMPOSER_OPTS=""
|
23 |
+
- COMPOSER_OPTS="--prefer-lowest"
|
24 |
+
|
25 |
+
before_install:
|
26 |
+
- mkdir tests/files
|
27 |
+
|
28 |
+
install:
|
29 |
+
- if [[ "${TRAVIS_PHP_VERSION}" == "5.5" ]]; then composer require phpunit/phpunit:^4.8.36 phpspec/phpspec:^2 --prefer-dist --update-with-dependencies; fi
|
30 |
+
- if [[ "${TRAVIS_PHP_VERSION}" == "7.2" ]]; then composer require --dev phpstan/phpstan:^0.9.2 --prefer-dist --update-with-dependencies; fi
|
31 |
+
- travis_retry composer update --prefer-dist $COMPOSER_OPTS
|
32 |
+
|
33 |
+
before_script:
|
34 |
+
- docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd:hardened
|
35 |
+
- php wait_for_ftp_service.php
|
36 |
+
- docker exec -it ftpd_server sh -c "(echo test; echo test) | pure-pw useradd bob -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/bob"
|
37 |
+
|
38 |
+
script:
|
39 |
+
- bin/phpunit tests/ftp/FtpIntegrationTests.php tests/ftp/FtpManualRecursionIntegrationTests.php tests/ftp/FtpdIntegrationTests.php tests/ftp/FtpdManualRecursionIntegrationTests.php
|
40 |
+
- bin/phpunit --exclude-group integration --coverage-text --coverage-clover coverage.xml
|
41 |
+
- bin/phpspec run
|
42 |
+
- if [[ "${TRAVIS_PHP_VERSION}" == "7.2" ]]; then bin/phpstan analyse -l 3 src; fi
|
43 |
+
|
44 |
+
after_script:
|
45 |
+
- wget https://scrutinizer-ci.com/ocular.phar
|
46 |
+
- php ocular.phar code-coverage:upload --format=php-clover coverage.xml
|
vendor/league/flysystem/README.md
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# League\Flysystem
|
2 |
+
|
3 |
+
[![Author](https://img.shields.io/badge/author-@frankdejonge-blue.svg?style=flat-square)](https://twitter.com/frankdejonge)
|
4 |
+
[![Build Status](https://img.shields.io/travis/thephpleague/flysystem/master.svg?style=flat-square)](https://travis-ci.org/thephpleague/flysystem)
|
5 |
+
[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/thephpleague/flysystem.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/flysystem/code-structure)
|
6 |
+
[![Quality Score](https://img.shields.io/scrutinizer/g/thephpleague/flysystem.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/flysystem)
|
7 |
+
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)
|
8 |
+
[![Packagist Version](https://img.shields.io/packagist/v/league/flysystem.svg?style=flat-square)](https://packagist.org/packages/league/flysystem)
|
9 |
+
[![Total Downloads](https://img.shields.io/packagist/dt/league/flysystem.svg?style=flat-square)](https://packagist.org/packages/league/flysystem)
|
10 |
+
[![Build status](https://img.shields.io/appveyor/ci/frankdejonge/flysystem/master.svg?style=flat-square&logo=appveyor)](https://ci.appveyor.com/project/frankdejonge/flysystem/branch/master)
|
11 |
+
|
12 |
+
[![SensioLabsInsight](https://insight.sensiolabs.com/projects/9820f1af-2fd0-4ab6-b42a-03e0c821e0af/big.png)](https://insight.sensiolabs.com/projects/9820f1af-2fd0-4ab6-b42a-03e0c821e0af)
|
13 |
+
|
14 |
+
Flysystem is a filesystem abstraction which allows you to easily swap out a local filesystem for a remote one.
|
15 |
+
|
16 |
+
[![Become a Patron](https://flysystem.thephpleague.com/logo/become_a_patron_button.png)](https://www.patreon.com/bePatron?u=8623643)
|
17 |
+
|
18 |
+
## Goals
|
19 |
+
|
20 |
+
* Have a generic API for handling common tasks across multiple file storage engines.
|
21 |
+
* Have consistent output which you can rely on.
|
22 |
+
* Integrate well with other packages/frameworks.
|
23 |
+
* Be cacheable.
|
24 |
+
* Emulate directories in systems that don't support them, like AwsS3.
|
25 |
+
* Support third party plugins.
|
26 |
+
* Make it easy to test your filesystem interactions.
|
27 |
+
* Support streams for big file handling.
|
28 |
+
|
29 |
+
## Installation
|
30 |
+
|
31 |
+
```
|
32 |
+
composer require league/flysystem
|
33 |
+
```
|
34 |
+
|
35 |
+
## Documentation
|
36 |
+
|
37 |
+
[Check out the documentation](https://flysystem.thephpleague.com/)
|
38 |
+
|
39 |
+
## Community Integrations
|
40 |
+
|
41 |
+
Want to get started quickly? Check out some of these integrations:
|
42 |
+
|
43 |
+
* Backup manager: https://github.com/heybigname/backup-manager
|
44 |
+
* CakePHP integration: https://github.com/WyriHaximus/FlyPie
|
45 |
+
* Cilex integration: https://github.com/WyriHaximus/cli-fly
|
46 |
+
* Drupal: https://www.drupal.org/project/flysystem
|
47 |
+
* elFinder: https://github.com/barryvdh/elfinder-flysystem-driver
|
48 |
+
* Laravel integration: https://github.com/GrahamCampbell/Laravel-Flysystem
|
49 |
+
* Silex integration: https://github.com/WyriHaximus/SliFly
|
50 |
+
* Symfony integration: https://github.com/1up-lab/OneupFlysystemBundle
|
51 |
+
* Yii 2 integration: https://github.com/creocoder/yii2-flysystem
|
52 |
+
* Zend Framework integration: https://github.com/bushbaby/BsbFlysystem
|
53 |
+
* PSR-11 containers: https://github.com/wshafer/psr11-flysystem
|
54 |
+
|
55 |
+
## Adapters
|
56 |
+
|
57 |
+
### Core
|
58 |
+
* Ftp
|
59 |
+
* Local
|
60 |
+
* NullAdapter
|
61 |
+
|
62 |
+
### Officially Supported
|
63 |
+
* Amazon Web Services - S3 V2: https://github.com/thephpleague/flysystem-aws-s3-v2
|
64 |
+
* Amazon Web Services - S3 V3: https://github.com/thephpleague/flysystem-aws-s3-v3
|
65 |
+
* Azure Blob Storage: https://github.com/thephpleague/flysystem-azure-blob-storage
|
66 |
+
* Memory: https://github.com/thephpleague/flysystem-memory
|
67 |
+
* PHPCR: https://github.com/thephpleague/flysystem-phpcr
|
68 |
+
* Rackspace Cloud Files: https://github.com/thephpleague/flysystem-rackspace
|
69 |
+
* Sftp (through phpseclib): https://github.com/thephpleague/flysystem-sftp
|
70 |
+
* WebDAV (through SabreDAV): https://github.com/thephpleague/flysystem-webdav
|
71 |
+
* Zip (through ZipArchive): https://github.com/thephpleague/flysystem-ziparchive
|
72 |
+
|
73 |
+
### Community Supported
|
74 |
+
* AliYun OSS Storage: https://github.com/xxtime/flysystem-aliyun-oss
|
75 |
+
* Amazon Cloud Drive - https://github.com/nikkiii/flysystem-acd
|
76 |
+
* Azure File Storage: https://github.com/academe/flysystem-azure-file-storage
|
77 |
+
* Backblaze: https://github.com/mhetreramesh/flysystem-backblaze
|
78 |
+
* ClamAV Scanner Adapter: https://github.com/mgriego/flysystem-clamav
|
79 |
+
* Citrix ShareFile: https://github.com/kapersoft/flysystem-sharefile
|
80 |
+
* Cloudinary: https://github.com/enl/flysystem-cloudinary
|
81 |
+
* Dropbox (with PHP 5.6 support): https://github.com/srmklive/flysystem-dropbox-v2
|
82 |
+
* Dropbox: https://github.com/spatie/flysystem-dropbox
|
83 |
+
* Fallback: https://github.com/Litipk/flysystem-fallback-adapter
|
84 |
+
* Gaufrette: https://github.com/jenkoian/flysystem-gaufrette
|
85 |
+
* Google Cloud Storage: https://github.com/Superbalist/flysystem-google-storage
|
86 |
+
* Google Drive: https://github.com/nao-pon/flysystem-google-drive
|
87 |
+
* Google Drive V2 (using regular paths): https://github.com/masbug/flysystem-google-drive-ext
|
88 |
+
* OneDrive: https://github.com/jacekbarecki/flysystem-onedrive
|
89 |
+
* OpenStack Swift: https://github.com/nimbusoftltd/flysystem-openstack-swift
|
90 |
+
* Redis (through Predis): https://github.com/danhunsaker/flysystem-redis
|
91 |
+
* Selectel Cloud Storage: https://github.com/ArgentCrusade/flysystem-selectel
|
92 |
+
* SinaAppEngine Storage: https://github.com/litp/flysystem-sae-storage
|
93 |
+
* PDO Database: https://github.com/IntegralSoftware/flysystem-pdo-adapter
|
94 |
+
|
95 |
+
## Caching (https://github.com/thephpleague/flysystem-cached-adapter)
|
96 |
+
|
97 |
+
* Adapter (using another Flysystem adapter)
|
98 |
+
* Memcached
|
99 |
+
* Memory (array caching)
|
100 |
+
* Redis (through Predis)
|
101 |
+
* Stash
|
102 |
+
|
103 |
+
## Security
|
104 |
+
|
105 |
+
If you discover any security related issues, please email info@frankdejonge.nl instead of using the issue tracker.
|
106 |
+
|
107 |
+
## Enjoy
|
108 |
+
|
109 |
+
Oh and if you've come down this far, you might as well follow me on [twitter](https://twitter.com/frankdejonge).
|
vendor/league/flysystem/changelog.md
ADDED
@@ -0,0 +1,403 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Changelog
|
2 |
+
|
3 |
+
## 1.0.49 - 2018-11-24
|
4 |
+
|
5 |
+
* It's my birthday today.
|
6 |
+
* Error message for directory creation in the Local adapter has a better description with more context.
|
7 |
+
|
8 |
+
## 1.0.48 - 2018-10-15
|
9 |
+
|
10 |
+
* The MountManager now implements the FilesystemInterface.
|
11 |
+
|
12 |
+
## 1.0.47 - 2018-09-14
|
13 |
+
|
14 |
+
* Specify mimetype for .epub files
|
15 |
+
|
16 |
+
## 1.0.46 - 2018-08-22
|
17 |
+
|
18 |
+
* Return failure when copying a stream does not work instead of relying only on fclose.
|
19 |
+
|
20 |
+
## 1.0.45 - 2018-05-07
|
21 |
+
|
22 |
+
* Fixed a regression in path-derived metadata fetching.
|
23 |
+
|
24 |
+
## 1.0.44 - 2018-04-06
|
25 |
+
|
26 |
+
* Added missing file presence checks on `Filesystem::setVisibility` and `Filesystem::getSize`.
|
27 |
+
* The `Handler` types are now deprecated and will be removed in 2.0.0
|
28 |
+
* The `FilesystemInterface::get` method is now deprecated and will be removed in 2.0.0
|
29 |
+
|
30 |
+
## 1.0.43 - 2018-03-01
|
31 |
+
|
32 |
+
* Remove /docs from composer artifact.
|
33 |
+
|
34 |
+
## 1.0.42 - 2018-01-27
|
35 |
+
|
36 |
+
* Fixed FTP manual recursion.
|
37 |
+
* Various code style fixes.
|
38 |
+
|
39 |
+
## 1.0.41 - 2017-08-06
|
40 |
+
|
41 |
+
### Fixed
|
42 |
+
|
43 |
+
* Response array check mistake was corrected.
|
44 |
+
|
45 |
+
### Altered
|
46 |
+
|
47 |
+
* Removed support for HHVM.
|
48 |
+
|
49 |
+
## 1.0.40 - 2017-04-28
|
50 |
+
|
51 |
+
### Improved
|
52 |
+
|
53 |
+
* Made it possible to indicate an adapter can ovewrite files using the write functions rather than the update ones.
|
54 |
+
|
55 |
+
## 1.0.39 - 2017-04-25
|
56 |
+
|
57 |
+
### Fixed
|
58 |
+
|
59 |
+
* Some FTP servers return the `total` of 0 when a file doesn't exist instead of saying it doesn't exist.
|
60 |
+
|
61 |
+
## 1.0.38 - 2017-04-22
|
62 |
+
|
63 |
+
### Fixed
|
64 |
+
|
65 |
+
* Pure-FTPd now escapes the first call to rawlist too.
|
66 |
+
|
67 |
+
### Improved
|
68 |
+
|
69 |
+
* You can now optionally put the FTP adapter in `utf8`-mode by setting the `utf8` setting to `true`.
|
70 |
+
|
71 |
+
## 1.0.37 - 2017-03-22
|
72 |
+
|
73 |
+
### Fixed
|
74 |
+
|
75 |
+
* Space escaping for Pure-FTPd in the FTP adapter.
|
76 |
+
|
77 |
+
## 1.0.36 - 2017-03-18
|
78 |
+
|
79 |
+
### Fixed
|
80 |
+
|
81 |
+
* Ensure an FTP connection is still a resource before closing it.
|
82 |
+
* Made return values of some internal adapters consistent.
|
83 |
+
* Made 0 a valid FTP username.
|
84 |
+
* Docblock class reference fixes.
|
85 |
+
* Created a more specific exception for when a mount manage is not found (with BC).
|
86 |
+
|
87 |
+
## 1.0.35 - 2017-02-09
|
88 |
+
|
89 |
+
### Fixed
|
90 |
+
|
91 |
+
* Creating a directory in FTP checked whether a directory already existed, the check was not strict enough.
|
92 |
+
|
93 |
+
## 1.0.34 - 2017-01-30
|
94 |
+
|
95 |
+
### Fixed
|
96 |
+
|
97 |
+
* Account for a Finfo buffer error which causes an array to string conversion.
|
98 |
+
* Simplified path handling for Windows.
|
99 |
+
|
100 |
+
## 1.0.33 - 2017-01-23
|
101 |
+
|
102 |
+
### Fixed
|
103 |
+
|
104 |
+
* Path traversing possibility on Windows.
|
105 |
+
|
106 |
+
## 1.0.32 - 2016-10-19
|
107 |
+
|
108 |
+
### Fixed
|
109 |
+
|
110 |
+
* Fixed listings on windows.
|
111 |
+
|
112 |
+
## 1.0.31 - 2016-10-19
|
113 |
+
|
114 |
+
### Fixed
|
115 |
+
|
116 |
+
* Relative path resolving was too greedy.
|
117 |
+
|
118 |
+
## 1.0.30 - 2016-10-18
|
119 |
+
|
120 |
+
### Altered
|
121 |
+
|
122 |
+
* Lowered minimum PHP version to 5.5.9
|
123 |
+
|
124 |
+
## 1.0.29 - 2016-10-18
|
125 |
+
|
126 |
+
### Improved
|
127 |
+
|
128 |
+
* All FTP-like adapters now have a safe storage for usernames and passwords.
|
129 |
+
|
130 |
+
## 1.0.28 - 2016-10-07
|
131 |
+
|
132 |
+
### Fixed
|
133 |
+
|
134 |
+
* [#705] Config::has now also checks the fallback config.
|
135 |
+
|
136 |
+
## 1.0.27 - 2016-08-10
|
137 |
+
|
138 |
+
### Fixed
|
139 |
+
|
140 |
+
* [#684] The local adapter now infers the mimetype based on the extension for empty files.
|
141 |
+
|
142 |
+
## 1.0.26 - 2016-08-03
|
143 |
+
|
144 |
+
### Added
|
145 |
+
|
146 |
+
* [Filesystem] Added an option to disable asserts.
|
147 |
+
|
148 |
+
## 1.0.25 - 2016-07-18
|
149 |
+
|
150 |
+
### Improved
|
151 |
+
|
152 |
+
* [Local\Ftp] Streams opened with `fopen` now open in binary mode, which is better on Windows environments.
|
153 |
+
|
154 |
+
## 1.0.24 - 2016-06-03
|
155 |
+
|
156 |
+
### Fixed
|
157 |
+
|
158 |
+
* [Local] Creating the root directory could lead to raceconditions, which are now handled a lot nicer. Initially only
|
159 |
+
for the constructor but now also fixed the same thing for all the write operations.
|
160 |
+
|
161 |
+
|
162 |
+
## 1.0.23 - 2016-06-03
|
163 |
+
|
164 |
+
### Altered
|
165 |
+
|
166 |
+
* Default file/directory permissions are non executable.
|
167 |
+
|
168 |
+
## 1.0.22 - 2016-04-28
|
169 |
+
|
170 |
+
### Fixed
|
171 |
+
|
172 |
+
* Regression fix, the "0" root directory is now possible again.
|
173 |
+
|
174 |
+
## 1.0.21 - 2016-04-22
|
175 |
+
|
176 |
+
### Fixed
|
177 |
+
|
178 |
+
* Explicitly return false when a `has` call receives an empty filename.
|
179 |
+
* MounManager `copy` and `move` operators now comply to the `Filesystem`'s signature.
|
180 |
+
|
181 |
+
## 1.0.20 - 2016-03-14
|
182 |
+
|
183 |
+
### Improved
|
184 |
+
|
185 |
+
* MimeType detection now falls back on extension guessing when the contents is a resource.
|
186 |
+
|
187 |
+
## 1.0.19 - 2016-03-12
|
188 |
+
|
189 |
+
### Fixed
|
190 |
+
|
191 |
+
* [Util::normalizeRelativePath] `'.'` didn't normalize to `''`, this is now fixed.
|
192 |
+
|
193 |
+
## 1.0.18 - 2016-03-07
|
194 |
+
|
195 |
+
### Fixed
|
196 |
+
|
197 |
+
* Reverted "Simplified Util::pathinfo, dirname key always exists." which had unexpected side-effects.
|
198 |
+
|
199 |
+
## 1.0.17 - 2016-02-19
|
200 |
+
|
201 |
+
### Fixed
|
202 |
+
|
203 |
+
* [Util::guessMimeType] Worked around incorrect detection of assembly mime-type. (#608)
|
204 |
+
|
205 |
+
## 1.0.16 - 2015-12-19
|
206 |
+
|
207 |
+
### Fixed
|
208 |
+
|
209 |
+
* [Ftp::isConnected] PHP warnings are prevented by improving the connection check.
|
210 |
+
* [Ftp::listContents] Recursive listings not use the `R` flag instead of the function param.
|
211 |
+
* [Ftp::listContents] The `*` character is now properly escaped.
|
212 |
+
* [Ftp::getMetadata] The `*` character is now properly escaped.
|
213 |
+
* [Ftp] An `ignorePassiveAddress` option has been added to allow NAS FTP servers to work.
|
214 |
+
* [Util] Mimetype `application/x-empty` is not treated as `text/plain` and will fall back to extension based mimetype checks.
|
215 |
+
* [Local] Unreadable files no longer cause a Fatal error, they're not a catchable exception.
|
216 |
+
|
217 |
+
## 1.0.15 - 2015-10-01
|
218 |
+
|
219 |
+
### Fixed
|
220 |
+
|
221 |
+
* [Util::emulateDirectories] Now emulates correctly when a mix of files and directories are returned.
|
222 |
+
|
223 |
+
## 1.0.14 - 2015-09-28
|
224 |
+
|
225 |
+
### Added
|
226 |
+
|
227 |
+
* [Adapter\Local] Now has configurable file and directory permissions.
|
228 |
+
|
229 |
+
## 1.0.13 - 2015-09-20
|
230 |
+
|
231 |
+
### Fixed
|
232 |
+
|
233 |
+
* [Adapter\Ftp] Now tries to reconnect when a connection is dropped.
|
234 |
+
|
235 |
+
## 1.0.12 - 2015-09-05
|
236 |
+
|
237 |
+
### Fixed
|
238 |
+
|
239 |
+
* [Util::pathinfo] Now checks for existence of the dirname key, it's missing in some PHP versions.
|
240 |
+
|
241 |
+
## 1.0.11 - 2015-07-18
|
242 |
+
|
243 |
+
### Fixed
|
244 |
+
|
245 |
+
* [Adapter\Local::deleteDir] Now removes up links correctly.
|
246 |
+
|
247 |
+
## 1.0.10 - 2015-07-21
|
248 |
+
|
249 |
+
### Fixed
|
250 |
+
|
251 |
+
* [Filesystem::listContents] The implementation is clearer now and works more reliably for windows users.
|
252 |
+
|
253 |
+
## 1.0.9 - 2015-07-13
|
254 |
+
|
255 |
+
### Fixed
|
256 |
+
|
257 |
+
* [Filesystem::listContents] This function now uses DIRECTORY_SEPARATOR when the local adapter is used.
|
258 |
+
|
259 |
+
## 1.0.8 - 2015-07-12
|
260 |
+
|
261 |
+
### Altered
|
262 |
+
|
263 |
+
* [Local::deleteDir] This function now uses the correct (reversed) iterator instead of relying in listContents.
|
264 |
+
|
265 |
+
### Added
|
266 |
+
|
267 |
+
* [Local] The Local adapter now has the ability to skip links using Local::SKIP_LINKS as the third constructor argument.
|
268 |
+
|
269 |
+
## 1.0.7 - 2015-07-11
|
270 |
+
|
271 |
+
### Fixed
|
272 |
+
|
273 |
+
* [Filesystem] Fixed the handling of directories named "0".
|
274 |
+
|
275 |
+
## 1.0.6 - 2015-07-08
|
276 |
+
|
277 |
+
### Fixed
|
278 |
+
|
279 |
+
* [Adapter\Local] Directories are no longer created with the 0777 permissions which is unsafe for shared hosting environments.
|
280 |
+
|
281 |
+
## 1.0.5 - 2015-07-08
|
282 |
+
|
283 |
+
### Fixed
|
284 |
+
|
285 |
+
* [Filesystem::listContent] Emulated directories didn't respect the natural sorting, this is now corrected in the listContents method.
|
286 |
+
* [Filesystem::listContents] The result excess from listing calls wasn't filtered strict enough, this is now improved.
|
287 |
+
|
288 |
+
### Added
|
289 |
+
|
290 |
+
* [Handler] Added getter for the Filesystem.
|
291 |
+
* [Handler] Now allows plugins calls.
|
292 |
+
|
293 |
+
## 1.0.4 - 2015-06-07
|
294 |
+
|
295 |
+
### Fixed
|
296 |
+
|
297 |
+
* [Adapter\Ftp] Now handles windows FTP servers.
|
298 |
+
* [Adapter\Local] Symlinks are now explicitly not supported, this was previously broken.
|
299 |
+
* [Adapter\Ftp] Detecting whether a path is a directory or not is more reliable.
|
300 |
+
* [Adapter\SynologyFtp] Has been renamed to Ftpd (The original class still exists for BC).
|
301 |
+
* [Filesystem] Not uses `getAdapter` internally to aid extension.
|
302 |
+
* [Adapter\Local] Now uses `umask` when creating directories to make it more reliable.
|
303 |
+
* [Misc] Coding style fixes.
|
304 |
+
|
305 |
+
## 1.0.3 - 2015-03-29
|
306 |
+
|
307 |
+
### Fixed
|
308 |
+
|
309 |
+
* #429: Handle FTP filenames with leading spaces.
|
310 |
+
* #418: Handle FTP filenames with dot prefixes.
|
311 |
+
* #427: Path normalising edge case resolved.
|
312 |
+
|
313 |
+
## 1.0.2 2015-03-10
|
314 |
+
|
315 |
+
### Altered
|
316 |
+
|
317 |
+
* [Adapter\Local] Again allows read only dirs to be the adapter's root.
|
318 |
+
|
319 |
+
## 1.0.1 - 2015-01-23
|
320 |
+
|
321 |
+
### Fixed
|
322 |
+
|
323 |
+
* Re-added missing metadata from pathinfo to `getMetadata` calls.
|
324 |
+
|
325 |
+
## 1.0.0 - 2015-01-19
|
326 |
+
|
327 |
+
### Removed
|
328 |
+
|
329 |
+
* Adapters moved into their own repo's: AwsS3, Dropbox, GridFS, Rackspace
|
330 |
+
* [Filesystem] Caching is removed and moved into it's own repo as an adapter decorator.
|
331 |
+
|
332 |
+
### Fixed
|
333 |
+
|
334 |
+
* [FilesystemInterface] This interface is now no longer related to the AdapterInterface and now correctly specifies return type.
|
335 |
+
* [AdapterInterface] The adapter interface now consistently specifies return type.
|
336 |
+
|
337 |
+
### Altered
|
338 |
+
|
339 |
+
* [AbstractAdapter / Polyfills] Polyfill methods from the AbstractAdapter are now moved to their own traits and only included in adapters that need them.
|
340 |
+
|
341 |
+
## 0.5.12 - 2014-11-05
|
342 |
+
|
343 |
+
### Fixed
|
344 |
+
|
345 |
+
* [Cache] Cache contents is now in control over what's cached instead of the implicit controle the adapters had.
|
346 |
+
|
347 |
+
## 0.5.11 - 2014-11-05
|
348 |
+
|
349 |
+
### Fixed
|
350 |
+
|
351 |
+
* [AwsS3] Removed raw response from response array
|
352 |
+
* [Cache] Ensure cache response is JSON formatted and has the correct entries.
|
353 |
+
|
354 |
+
## 0.5.10 - 2014-10-28
|
355 |
+
|
356 |
+
### Fixed
|
357 |
+
|
358 |
+
* [AwsS3] Contents supplied during AwsS3::write is now cached like all the other adapters. (Very minor chance of this happening)
|
359 |
+
* [AwsS] Detached stream from guzzle response to prevent it from closing on EntityBody destruction.
|
360 |
+
* [Util] Paths with directory names or file names with double dots are now allowed.
|
361 |
+
* [Cache:Noop] Added missing readStream method.
|
362 |
+
|
363 |
+
## 0.5.9 - 2014-10-18
|
364 |
+
|
365 |
+
### Fixed
|
366 |
+
|
367 |
+
* [AwsS3] CacheControl write option is now correctly mapped.
|
368 |
+
* [AwsS3] writeStream now properly detects Body type which resulted in cache corruption: c7246e3341135baad16180760ece3967da7a44f3
|
369 |
+
|
370 |
+
## 0.5.8 - 2014-10-17
|
371 |
+
|
372 |
+
### Fixed
|
373 |
+
|
374 |
+
* [Rackspace] Path prefixing done twice when retrieving meta-data.
|
375 |
+
* [Core] Finfo is only used to determine mime-type when available.
|
376 |
+
* [AwsS3] Previously set ACL is now respected in rename and copy.
|
377 |
+
|
378 |
+
### Added
|
379 |
+
|
380 |
+
* Stash cache adapter.
|
381 |
+
|
382 |
+
|
383 |
+
---
|
384 |
+
|
385 |
+
## 0.5.7 - 2014-09-16
|
386 |
+
|
387 |
+
### Fixed
|
388 |
+
|
389 |
+
* Path prefixing would done twice for rackspace when using streams for writes or updates.
|
390 |
+
|
391 |
+
---
|
392 |
+
|
393 |
+
## 0.5.6 - 2014-09-09
|
394 |
+
|
395 |
+
### Added
|
396 |
+
|
397 |
+
- Copy Adapter
|
398 |
+
|
399 |
+
### Fixed
|
400 |
+
|
401 |
+
- Dropbox path normalisation.
|
402 |
+
|
403 |
+
---
|
vendor/league/flysystem/docs/CNAME
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
flysystem.thephpleague.com
|
vendor/league/flysystem/docs/Gemfile
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
source 'https://rubygems.org'
|
2 |
+
|
3 |
+
group :jekyll_plugins do
|
4 |
+
gem 'github-pages'
|
5 |
+
gem 'jekyll-sitemap'
|
6 |
+
end
|
vendor/league/flysystem/docs/_config.yml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
plugins:
|
2 |
+
- jekyll-sitemap
|
3 |
+
- jekyll-redirect-from
|
4 |
+
defaults:
|
5 |
+
- scope:
|
6 |
+
path: ""
|
7 |
+
values:
|
8 |
+
layout: "default"
|
9 |
+
published_at: "2018-03-11"
|
10 |
+
updated_at: "2018-03-11"
|
vendor/league/flysystem/docs/_data/menu.yml
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Flysystem:
|
2 |
+
Introduction: '/docs/'
|
3 |
+
Sponsors: '/docs/sponsors/'
|
4 |
+
Architecture: '/docs/architecture/'
|
5 |
+
|
6 |
+
Usage:
|
7 |
+
Setup / Bootstrap: '/docs/usage/setup/'
|
8 |
+
Filesystem API: '/docs/usage/filesystem-api/'
|
9 |
+
|
10 |
+
Guides:
|
11 |
+
Laravel Usage: '/docs/guides/laravel-usage/'
|
12 |
+
Deterministic Code: '/docs/guides/deterministic-programming/'
|
13 |
+
Handling Uploads: '/docs/guides/uploads/'
|
14 |
+
|
15 |
+
Adapters:
|
16 |
+
Local: '/docs/adapter/local/'
|
17 |
+
Azure: '/docs/adapter/azure/'
|
18 |
+
AWS S3: '/docs/adapter/aws-s3/'
|
19 |
+
DigitalOcean Spaces: '/docs/adapter/digitalocean-spaces/'
|
20 |
+
Dropbox: '/docs/adapter/dropbox/'
|
21 |
+
FTP: '/docs/adapter/ftp/'
|
22 |
+
Memory: '/docs/adapter/memory/'
|
23 |
+
Null / Test: '/docs/adapter/null-test/'
|
24 |
+
Rackspace: '/docs/adapter/rackspace/'
|
25 |
+
ReplicateAdapter: '/docs/adapter/replicate/'
|
26 |
+
SFTP: '/docs/adapter/sftp/'
|
27 |
+
WebDAV: '/docs/adapter/webdav/'
|
28 |
+
PHPCR: '/docs/adapter/phpcr/'
|
29 |
+
ZipArchive: '/docs/adapter/zip-archive/'
|
30 |
+
|
31 |
+
Advanced Usage:
|
32 |
+
Performance: '/docs/advanced/performance/'
|
33 |
+
Mount Manager: '/docs/advanced/mount-manager/'
|
34 |
+
Caching: '/docs/advanced/caching/'
|
35 |
+
Plugins: '/docs/advanced/plugins/'
|
36 |
+
Provided Plugins: '/docs/advanced/provided-plugins/'
|
37 |
+
Upgrade to 1.0.0: '/docs/advanced/upgrade-to-1.0.0/'
|
38 |
+
Creating an adapter: '/docs/advanced/creating-an-adapter/'
|
vendor/league/flysystem/docs/_data/project.yml
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: "Flysystem"
|
2 |
+
tagline: "Many filesystems, one API."
|
3 |
+
description: "Filesystem abstraction library for PHP."
|
4 |
+
version: 1.0.45
|
5 |
+
google_analytics_tracking_id: UA-114647967-1
|
vendor/league/flysystem/docs/_includes/carbon.html
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CK7DT2JE&placement=flysystemthephpleaguecom" id="_carbonads_js"></script>
|
vendor/league/flysystem/docs/_includes/size-helper.html
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% if site.data.dev.dev_mode %}
|
2 |
+
<div class="fixed z-50 pin-t pin-l bg-black text-white rounded-br p-2 opacity-50">
|
3 |
+
<span class="sm:hidden">< sm</span>
|
4 |
+
<span class="sm-md:block hidden">sm-md</span>
|
5 |
+
<span class="md-lg:block hidden">md-lg</span>
|
6 |
+
<span class="lg-xl:block hidden">lg-xl</span>
|
7 |
+
<span class="xl:block hidden">> xl</span>
|
8 |
+
</div>
|
9 |
+
{% endif %}
|
vendor/league/flysystem/docs/_layouts/default.html
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<meta charset="utf-8">
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
|
7 |
+
<title>{{ page.title }} - {{ site.data.project.title }}</title>
|
8 |
+
<link href="https://fonts.googleapis.com/css?family=Raleway|Varela+Round" rel="stylesheet"/>
|
9 |
+
{% if site.data.project.description %}
|
10 |
+
<meta name="description" content="{{ site.data.project.description }}">
|
11 |
+
{% endif %}
|
12 |
+
{% unless site.data.dev.dev_mode %}
|
13 |
+
{% if site.data.project.google_analytics_tracking_id %}
|
14 |
+
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.data.project.google_analytics_tracking_id }}"></script>
|
15 |
+
<script>
|
16 |
+
window.dataLayer = window.dataLayer || [];
|
17 |
+
function gtag() { dataLayer.push(arguments);}
|
18 |
+
gtag('js', new Date());
|
19 |
+
gtag('config', '{{ site.data.project.google_analytics_tracking_id }}');
|
20 |
+
</script>
|
21 |
+
{% endif %}
|
22 |
+
<base href="https://flysystem.thephpleague.com/" />
|
23 |
+
{% endunless %}
|
24 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
|
25 |
+
<link rel="stylesheet" href="/dist/styles.css?v=1.0"/>
|
26 |
+
</head>
|
27 |
+
<body class="min-h-screen text-base text-indigo-body-text min-w-full pt-12 leading-normal bg-indigo-lightest">
|
28 |
+
{% include size-helper.html %}
|
29 |
+
<div class="pb-1 fixed z-10 pin-t w-screen bg-white border-indigo-lighter border-b">
|
30 |
+
<div class="max-w-2xl mx-auto px-4 py-2">
|
31 |
+
<div class="flex items-center flex-no-shrink pt-1">
|
32 |
+
<a href="/" class="flex items-center h-10">
|
33 |
+
<img class="h-10 w-10 mr-3" width="30" height="30" src="/img/flysystem.svg"/>
|
34 |
+
<span class="pr-2 font-normal overflow-hidden font-heading text-3xl text-indigo-darkest -sm:hidden">
|
35 |
+
Flysystem
|
36 |
+
<sup class="text-xs relative text-indigo" style="top: -20px;">{{ site.data.project.version }}</sup>
|
37 |
+
</span>
|
38 |
+
</a>
|
39 |
+
<div class="flex-grow"></div>
|
40 |
+
<div class="flex-no-shrink flex-no-grow h-10 px-4 relative">
|
41 |
+
<input id="global-search" class="focus:outline-0 h-10 py-2 pl-8 pr-2 text-indigo-darker rounded bg-indigo-lightest focus:border-indigo-light focus:bg-white focus:placeholder-none max-w-xs w-full appearance-none" type="text" placeholder="Search the docs" />
|
42 |
+
<span class="pointer-events-none absolute pin-y pin-l pl-6 flex items-center">
|
43 |
+
<svg class="fill-current pointer-events-none text-indigo-light w-4 h-4 border-transparent border" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"/></svg>
|
44 |
+
</span>
|
45 |
+
</div>
|
46 |
+
<a href="#" id="menu-toggle" class="block md:hidden h-8 w-8 border p-1 border-transparent text-grey hover:text-grey menu-closed">
|
47 |
+
<svg class="menu-closed:shown fill-current h-full w-full" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
48 |
+
<path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"/>
|
49 |
+
</svg>
|
50 |
+
<svg class="menu-closed:hidden fill-current h-full w-full" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
51 |
+
<path d="M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z"/>
|
52 |
+
</svg>
|
53 |
+
</a>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
<main class="mx-auto max-w-2xl px-4 py-2">
|
58 |
+
<div class="flex flex-grow">
|
59 |
+
<nav role="navigation" id="navigation" class="md:w-4/14 w-full lg:relative hidden md:block font-heading pt-2">
|
60 |
+
<menu class="pl-0 mt-0">
|
61 |
+
{% for section in site.data.menu %}
|
62 |
+
<h2 class="tracking-wide text-xs leading-loose tracking-wide text-indigo-light uppercase">{{ section[0] }}</h2>
|
63 |
+
<ul class="list-reset mb-6 block pr-6">
|
64 |
+
{% for link in section[1] %}
|
65 |
+
<li class="block">
|
66 |
+
<a class="leading-loose block w-full rounded text-md {% if page.url == link[1] %}text-white bg-indigo pl-2 -ml-2{% else %}text-indigo-darkest{% endif %}"
|
67 |
+
href="{{ link[1] }}">{{ link[0] }}</a>
|
68 |
+
</li>
|
69 |
+
{% endfor %}
|
70 |
+
</ul>
|
71 |
+
{% endfor %}
|
72 |
+
</menu>
|
73 |
+
</nav>
|
74 |
+
|
75 |
+
<article id="article" role="main" class="max-w-full md:block md:w-10/14">
|
76 |
+
{% unless page.hide_title %}
|
77 |
+
<h1 class="mb-4">{% if page.alternate_title %}{{ page.alternate_title }}{% else %}{{ page.title }}{% endif %}</h1>
|
78 |
+
<!--<p class="text-xs text-indigo-dark rounded rounded-t-none mb-4 text-shadow inline-block">-->
|
79 |
+
<!--{% if page.published_at != page.updated_at %}Last updated at {{ page.updated_at | date_to_long_string }} | {% endif %}Published at {{ page.published_at | date_to_long_string }}-->
|
80 |
+
<!--</p>-->
|
81 |
+
{% endunless %}
|
82 |
+
{{ content }}
|
83 |
+
</article>
|
84 |
+
</div>
|
85 |
+
</main>
|
86 |
+
<footer class="bg-indigo-darkest text-white">
|
87 |
+
|
88 |
+
</footer>
|
89 |
+
<script type="text/javascript" src="/dist/main.js"></script>
|
90 |
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
|
91 |
+
<script type="text/javascript"> docsearch({
|
92 |
+
apiKey: 'be7daf2d7afded0acb0589a0e304a423',
|
93 |
+
indexName: 'filesystem_thephpleague',
|
94 |
+
inputSelector: '#global-search',
|
95 |
+
debug: {% if site.data.dev.dev_mode %}true{% else %}false{% endif %}
|
96 |
+
});
|
97 |
+
</script>
|
98 |
+
</body>
|
99 |
+
</html>
|
vendor/league/flysystem/docs/adapter/aws-s3-v3.md
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/aws-s3/
|
4 |
+
redirect_from:
|
5 |
+
- /adapter/aws-s3/
|
6 |
+
- /adapter/aws-s3-v2/
|
7 |
+
- /adapter/aws-s3-v3/
|
8 |
+
title: Aws S3 Adapter V3
|
9 |
+
---
|
10 |
+
|
11 |
+
## Installation
|
12 |
+
|
13 |
+
```bash
|
14 |
+
composer require league/flysystem-aws-s3-v3
|
15 |
+
```
|
16 |
+
|
17 |
+
## Usage
|
18 |
+
|
19 |
+
```php
|
20 |
+
use Aws\S3\S3Client;
|
21 |
+
use League\Flysystem\AwsS3v3\AwsS3Adapter;
|
22 |
+
use League\Flysystem\Filesystem;
|
23 |
+
|
24 |
+
$client = S3Client::factory([
|
25 |
+
'credentials' => [
|
26 |
+
'key' => 'your-key',
|
27 |
+
'secret' => 'your-secret',
|
28 |
+
],
|
29 |
+
'region' => 'your-region',
|
30 |
+
'version' => 'latest|version',
|
31 |
+
]);
|
32 |
+
|
33 |
+
$adapter = new AwsS3Adapter($client, 'your-bucket-name', 'optional/path/prefix');
|
34 |
+
|
35 |
+
$filesystem = new Filesystem($adapter);
|
36 |
+
```
|
37 |
+
|
38 |
+
The required IAM permissions are:
|
39 |
+
|
40 |
+
```json
|
41 |
+
{
|
42 |
+
"Version": "2012-10-17",
|
43 |
+
"Statement": [
|
44 |
+
{
|
45 |
+
"Sid": "Stmt1420044805001",
|
46 |
+
"Effect": "Allow",
|
47 |
+
"Action": [
|
48 |
+
"s3:ListBucket",
|
49 |
+
"s3:GetObject",
|
50 |
+
"s3:GetObjectAcl",
|
51 |
+
"s3:PutObject",
|
52 |
+
"s3:PutObjectAcl",
|
53 |
+
"s3:ReplicateObject",
|
54 |
+
"s3:DeleteObject"
|
55 |
+
],
|
56 |
+
"Resource": [
|
57 |
+
"arn:aws:s3:::your-bucket-name",
|
58 |
+
"arn:aws:s3:::your-bucket-name/*"
|
59 |
+
]
|
60 |
+
}
|
61 |
+
]
|
62 |
+
}
|
63 |
+
```
|
64 |
+
|
65 |
+
To enable [reduced redunancy storage](http://aws.amazon.com/s3/details/#RRS) set up your adapter like so:
|
66 |
+
|
67 |
+
```php
|
68 |
+
$adapter = new AwsS3Adapter($client, 'bucket-name', 'optional/path/prefix', [
|
69 |
+
'StorageClass' => 'REDUCED_REDUNDANCY',
|
70 |
+
]);
|
71 |
+
```
|
72 |
+
|
73 |
+
### Compatible storage protocols
|
74 |
+
|
75 |
+
If you're using a storage service which implements the S3 protocols, you can set the `base_url` configuration option when constructing the client.
|
76 |
+
|
77 |
+
```php
|
78 |
+
$client = S3Client::factory([
|
79 |
+
'base_url' => 'http://some.other.endpoint',
|
80 |
+
// ... other settings
|
81 |
+
]);
|
82 |
+
```
|
83 |
+
|
84 |
+
---
|
85 |
+
|
86 |
+
## 🚨 Aws S3 Adapter - SDK V2 (LEGACY ADAPTER)
|
87 |
+
|
88 |
+
## Installation
|
89 |
+
|
90 |
+
```bash
|
91 |
+
composer require league/flysystem-aws-s3-v2
|
92 |
+
```
|
93 |
+
|
94 |
+
## Usage
|
95 |
+
|
96 |
+
```php
|
97 |
+
use Aws\S3\S3Client;
|
98 |
+
use League\Flysystem\AwsS3v2\AwsS3Adapter;
|
99 |
+
use League\Flysystem\Filesystem;
|
100 |
+
|
101 |
+
$client = S3Client::factory([
|
102 |
+
'key' => '[your key]',
|
103 |
+
'secret' => '[your secret]',
|
104 |
+
'region' => '[aws-region]',
|
105 |
+
]);
|
106 |
+
|
107 |
+
$adapter = new AwsS3Adapter($client, 'bucket-name', 'optional/path/prefix');
|
108 |
+
|
109 |
+
$filesystem = new Filesystem($adapter);
|
110 |
+
```
|
111 |
+
|
112 |
+
To enable [reduced redunancy storage](http://aws.amazon.com/s3/details/#RRS) set up your adapter like so:
|
113 |
+
|
114 |
+
```php
|
115 |
+
$adapter = new AwsS3Adapter($client, 'bucket-name', 'optional/path/prefix', [
|
116 |
+
'StorageClass' => 'REDUCED_REDUNDANCY',
|
117 |
+
]);
|
118 |
+
```
|
119 |
+
|
vendor/league/flysystem/docs/adapter/azure.md
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/azure/
|
4 |
+
redirect_from: /adapter/azure/
|
5 |
+
title: Azure Blob Storage
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-azure-blob-storage
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
```php
|
17 |
+
use League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter;
|
18 |
+
use League\Flysystem\Filesystem;
|
19 |
+
use MicrosoftAzure\Storage\Blob\BlobRestProxy;
|
20 |
+
|
21 |
+
include __DIR__.'/vendor/autoload.php';
|
22 |
+
|
23 |
+
$client = BlobRestProxy::createBlobService('DefaultEndpointsProtocol=https;AccountName={YOUR_ACCOUNT_NAME};AccountKey={YOUR_ACCOUNT_KEY};');
|
24 |
+
$adapter = new AzureBlobStorageAdapter($client, 'container_name');
|
25 |
+
$filesystem = new Filesystem($adapter);
|
26 |
+
var_dump($filesystem->listContents());
|
27 |
+
```
|
28 |
+
|
29 |
+
## Sponsored by:
|
30 |
+
|
31 |
+
<div class="flex my-6">
|
32 |
+
<a target="_blank" href="https://azure.microsoft.com/free/?utm_source=flysystem&utm_medium=banner&utm_campaign=flysystem_sponsorship" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
33 |
+
<img src="/img/azure.svg" class="max-w-full m-6 sm:m-8" alt="Azure.com"/>
|
34 |
+
<span style="background-color: #00a1f1;" class="text-center text-xl hidden sm:block py-4 bg-indigo-dark text-white bg-grey-lightest">Azure.com</span>
|
35 |
+
</a>
|
36 |
+
</div>
|
vendor/league/flysystem/docs/adapter/digitalocean-spaces.md
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/digitalocean-spaces/
|
4 |
+
redirect_from: /adapter/digitalocean-spaces/
|
5 |
+
title: DigitalOcean Spaces
|
6 |
+
---
|
7 |
+
|
8 |
+
The DO Spaces api are compatible with those of S3, from Flysystem's perspective this means you can use the
|
9 |
+
`league/flysystem-aws-s3-v3` adapter.
|
10 |
+
|
11 |
+
## Installation
|
12 |
+
|
13 |
+
~~~ bash
|
14 |
+
composer require league/flysystem-aws-s3-v3
|
15 |
+
~~~
|
16 |
+
|
17 |
+
## Usage
|
18 |
+
|
19 |
+
```php
|
20 |
+
use Aws\S3\S3Client;
|
21 |
+
use League\Flysystem\AwsS3v3\AwsS3Adapter;
|
22 |
+
use League\Flysystem\Filesystem;
|
23 |
+
|
24 |
+
$client = new S3Client([
|
25 |
+
'credentials' => [
|
26 |
+
'key' => 'your-key',
|
27 |
+
'secret' => 'your-secret',
|
28 |
+
],
|
29 |
+
'region' => 'your-region',
|
30 |
+
'version' => 'latest|version',
|
31 |
+
'endpoint' => 'https://your-region.digitaloceanspaces.com',
|
32 |
+
]);
|
33 |
+
|
34 |
+
$adapter = new AwsS3Adapter($client, 'your-bucket-name');
|
35 |
+
|
36 |
+
$filesystem = new Filesystem($adapter);
|
37 |
+
```
|
vendor/league/flysystem/docs/adapter/dropbox.md
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/dropbox/
|
4 |
+
redirect_from: /adapter/dropbox/
|
5 |
+
title: Dropbox Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require spatie/flysystem-dropbox
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
A token can be generated in the [App Console](https://www.dropbox.com/developers/apps) for any Dropbox API app. You'll find more info at [the Dropbox Developer Blog](https://blogs.dropbox.com/developers/2014/05/generate-an-access-token-for-your-own-account/).
|
17 |
+
|
18 |
+
```php
|
19 |
+
use League\Flysystem\Filesystem;
|
20 |
+
use Spatie\Dropbox\Client;
|
21 |
+
use Spatie\FlysystemDropbox\DropboxAdapter;
|
22 |
+
|
23 |
+
$client = new Client($authorizationToken);
|
24 |
+
|
25 |
+
$adapter = new DropboxAdapter($client);
|
26 |
+
|
27 |
+
$filesystem = new Filesystem($adapter);
|
28 |
+
```
|
vendor/league/flysystem/docs/adapter/ftp.md
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/ftp/
|
4 |
+
redirect_from: /adapter/ftp/
|
5 |
+
title: FTP Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
This adapter ships with Flysystem by default.
|
9 |
+
|
10 |
+
## Usage
|
11 |
+
|
12 |
+
```php
|
13 |
+
use League\Flysystem\Filesystem;
|
14 |
+
use League\Flysystem\Adapter\Ftp as Adapter;
|
15 |
+
|
16 |
+
$filesystem = new Filesystem(new Adapter([
|
17 |
+
'host' => 'ftp.example.com',
|
18 |
+
'username' => 'username',
|
19 |
+
'password' => 'password',
|
20 |
+
|
21 |
+
/** optional config settings */
|
22 |
+
'port' => 21,
|
23 |
+
'root' => '/path/to/root',
|
24 |
+
'passive' => true,
|
25 |
+
'ssl' => true,
|
26 |
+
'timeout' => 30,
|
27 |
+
]));
|
28 |
+
```
|
vendor/league/flysystem/docs/adapter/local.md
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/local/
|
4 |
+
redirect_from: /adapter/local/
|
5 |
+
title: Local Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
This adapter ships with Flysystem by default.
|
9 |
+
|
10 |
+
## Usage
|
11 |
+
|
12 |
+
```php
|
13 |
+
use League\Flysystem\Filesystem;
|
14 |
+
use League\Flysystem\Adapter\Local;
|
15 |
+
|
16 |
+
$adapter = new Local(__DIR__.'/path/to/root');
|
17 |
+
$filesystem = new Filesystem($adapter);
|
18 |
+
```
|
19 |
+
|
20 |
+
## Locks
|
21 |
+
|
22 |
+
By default this adapter uses a lock during writes
|
23 |
+
and updates. This behaviour can be altered using the
|
24 |
+
second constructor argument.
|
25 |
+
|
26 |
+
```php
|
27 |
+
$adapter = new Local(__DIR__.'/path/to/too', 0);
|
28 |
+
```
|
29 |
+
|
30 |
+
## Links [added in 1.0.8]
|
31 |
+
|
32 |
+
The Local adapter doesn't support links, this violates
|
33 |
+
the root path constraint which is enforced throughout
|
34 |
+
Flysystem. By default, when links are encountered an
|
35 |
+
exception is thrown. This behaviour can be altered
|
36 |
+
using the third constructor argument.
|
37 |
+
|
38 |
+
```php
|
39 |
+
// Skip links
|
40 |
+
$adapter = new Local(
|
41 |
+
__DIR__.'/path/to/too',
|
42 |
+
LOCK_EX,
|
43 |
+
Local::SKIP_LINKS
|
44 |
+
);
|
45 |
+
|
46 |
+
// Throw exceptions (default)
|
47 |
+
$adapter = new Local(
|
48 |
+
__DIR__.'/path/to/too',
|
49 |
+
LOCK_EX,
|
50 |
+
Local::DISALLOW_LINKS
|
51 |
+
);
|
52 |
+
```
|
53 |
+
|
54 |
+
## File and directory permission settings
|
55 |
+
|
56 |
+
Since **1.0.14** you can set default file and directory permissions:
|
57 |
+
|
58 |
+
```php
|
59 |
+
$adapter = new Local(
|
60 |
+
__DIR__.'/path/to/too',
|
61 |
+
LOCK_EX,
|
62 |
+
Local::DISALLOW_LINKS,
|
63 |
+
[
|
64 |
+
'file' => [
|
65 |
+
'public' => 0744,
|
66 |
+
'private' => 0700,
|
67 |
+
],
|
68 |
+
'dir' => [
|
69 |
+
'public' => 0755,
|
70 |
+
'private' => 0700,
|
71 |
+
]
|
72 |
+
]
|
73 |
+
);
|
74 |
+
```
|
vendor/league/flysystem/docs/adapter/memory.md
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/memory/
|
4 |
+
redirect_from: /adapter/memory/
|
5 |
+
title: Memory Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
This adapter keeps the filesystem completely in memory. This is useful when you need a filesystem, but don't want it persisted.
|
9 |
+
|
10 |
+
## Installation
|
11 |
+
|
12 |
+
```bash
|
13 |
+
composer require league/flysystem-memory
|
14 |
+
```
|
15 |
+
|
16 |
+
## Usage
|
17 |
+
|
18 |
+
```php
|
19 |
+
use League\Flysystem\Filesystem;
|
20 |
+
use League\Flysystem\Memory\MemoryAdapter;
|
21 |
+
|
22 |
+
$filesystem = new Filesystem(new MemoryAdapter());
|
23 |
+
```
|
vendor/league/flysystem/docs/adapter/null-test.md
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/null-test/
|
4 |
+
redirect_from: /adapter/null-test/
|
5 |
+
title: Null Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
Comes with the main Flysystem package.
|
11 |
+
|
12 |
+
## Usage
|
13 |
+
|
14 |
+
Acts like `/dev/null`
|
15 |
+
|
16 |
+
```php
|
17 |
+
$adapter = new League\Flysystem\Adapter\NullAdapter;
|
18 |
+
$filesystem = new League\Flysystem\Filesystem($adapter);
|
19 |
+
```
|
vendor/league/flysystem/docs/adapter/phpcr.md
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/phpcr/
|
4 |
+
redirect_from: /adapter/phpcr/
|
5 |
+
title: PHPCR Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
This adapter works with any [PHPCR](http://phpcr.github.io) implementation.
|
9 |
+
Choose the one that fits your needs and add it to your project, or composer
|
10 |
+
will complain that you miss `phpcr/phpcr-implementation`. See
|
11 |
+
[this article](http://symfony.com/doc/master/cmf/cookbook/database/choosing_phpcr_implementation.html)
|
12 |
+
for more on choosing your implementation.
|
13 |
+
|
14 |
+
## Installation
|
15 |
+
|
16 |
+
Assuming you go with jackalope-doctrine-dbal, do:
|
17 |
+
|
18 |
+
```bash
|
19 |
+
composer require jackalope/jackalope-doctrine-dbal league/flysystem-phpcr
|
20 |
+
```
|
21 |
+
|
22 |
+
## Usage
|
23 |
+
|
24 |
+
Bootstrap your PHPCR implementation. If you chose jackalope-doctrine-dbal with sqlite,
|
25 |
+
this will look like this for example:
|
26 |
+
|
27 |
+
```php
|
28 |
+
use Doctrine\DBAL\Driver\Connection;
|
29 |
+
use Doctrine\DBAL\DriverManager;
|
30 |
+
use Jackalope\RepositoryFactoryDoctrineDBAL;
|
31 |
+
use League\Flysystem\Filesystem;
|
32 |
+
use League\Flysystem\Phpcr\PhpcrAdapter;
|
33 |
+
use PHPCR\SimpleCredentials;
|
34 |
+
|
35 |
+
$connection = DriverManager::getConnection([
|
36 |
+
'driver' => 'pdo_sqlite',
|
37 |
+
'path' => '/path/to/sqlite.db',
|
38 |
+
]);
|
39 |
+
$factory = new RepositoryFactoryDoctrineDBAL();
|
40 |
+
$repository = $factory->getRepository([
|
41 |
+
'jackalope.doctrine_dbal_connection' => $connection,
|
42 |
+
]);
|
43 |
+
$session = $repository->login(new SimpleCredentials('username', 'password'));
|
44 |
+
|
45 |
+
//Or when no credentials are required
|
46 |
+
$session = $repository->login();
|
47 |
+
|
48 |
+
// this part looks the same regardless of your phpcr implementation.
|
49 |
+
$root = '/flysystem_tests';
|
50 |
+
$filesystem = new Filesystem(new PhpcrAdapter($session, $root));
|
51 |
+
```
|
52 |
+
|
53 |
+
### Indicate specific modification timestamp when writing content
|
54 |
+
By default PHPCR will use the current system time as the "last modified" timestamp of an entry when writing content. A specific timestamp can be provided by using the configuration array:
|
55 |
+
|
56 |
+
```php
|
57 |
+
$path = '/path/to/file.ext';
|
58 |
+
$content = file_get_contents($path);
|
59 |
+
$config = ['timestamp' => filemtime($path)]; //Use the time when the content of the file was last changed.
|
60 |
+
|
61 |
+
$filesystem->write($path, $content, $config);
|
62 |
+
```
|
63 |
+
|
64 |
+
This can be useful when the file timestamp needs to be preserved when copying a file structure to PHPCR.
|
vendor/league/flysystem/docs/adapter/rackspace.md
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/rackspace/
|
4 |
+
redirect_from: /adapter/rackspace/
|
5 |
+
title: Rackspace Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-rackspace
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
```php
|
17 |
+
use OpenCloud\OpenStack;
|
18 |
+
use OpenCloud\Rackspace;
|
19 |
+
use League\Flysystem\Filesystem;
|
20 |
+
use League\Flysystem\Rackspace\RackspaceAdapter;
|
21 |
+
|
22 |
+
$client = new OpenStack(Rackspace::UK_IDENTITY_ENDPOINT, [
|
23 |
+
'username' => ':username',
|
24 |
+
'password' => ':password',
|
25 |
+
]);
|
26 |
+
|
27 |
+
$store = $client->objectStoreService('cloudFiles', 'LON');
|
28 |
+
$container = $store->getContainer('flysystem');
|
29 |
+
|
30 |
+
$filesystem = new Filesystem(new RackspaceAdapter($container, 'optional/path/prefix'));
|
31 |
+
```
|
vendor/league/flysystem/docs/adapter/replicate.md
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/replicate/
|
4 |
+
redirect_from: /adapter/replicate/
|
5 |
+
title: Replicate Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-replicate-adapter
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
The `ReplicateAdapter` facilitates smooth transitions between adapters, allowing an application to stay functional and migrate its files from one adapter to another. The adapter takes two other adapters, a source and a replica. Every change is delegated to both adapters, while all the read operations are passed onto the source only.
|
17 |
+
|
18 |
+
```php
|
19 |
+
$source = new League\Flysystem\AwsS3V3\AwsS3Adapter(...);
|
20 |
+
$replica = new League\Flysystem\Adapter\Local(...);
|
21 |
+
$adapter = new League\Flysystem\Replicate\ReplicateAdapter($source, $replica);
|
22 |
+
$filesystem = new Filesystem($adapter);
|
23 |
+
```
|
vendor/league/flysystem/docs/adapter/sftp.md
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/sftp/
|
4 |
+
redirect_from: /adapter/sftp/
|
5 |
+
title: SFTP Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-sftp
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
```php
|
17 |
+
use League\Flysystem\Filesystem;
|
18 |
+
use League\Flysystem\Sftp\SftpAdapter;
|
19 |
+
|
20 |
+
$filesystem = new Filesystem(new SftpAdapter([
|
21 |
+
'host' => 'example.com',
|
22 |
+
'port' => 22,
|
23 |
+
'username' => 'username',
|
24 |
+
'password' => 'password',
|
25 |
+
'privateKey' => 'path/to/or/contents/of/privatekey',
|
26 |
+
'root' => '/path/to/root',
|
27 |
+
'timeout' => 10,
|
28 |
+
]));
|
29 |
+
```
|
vendor/league/flysystem/docs/adapter/webdav.md
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/webdav/
|
4 |
+
redirect_from: /adapter/webdav/
|
5 |
+
title: WebDAV Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-webdav
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
```php
|
17 |
+
$client = new Sabre\DAV\Client($settings);
|
18 |
+
$adapter = new League\Flysystem\WebDAV\WebDAVAdapter($client, 'optional/path/prefix');
|
19 |
+
$flysystem = new League\Flysystem\Filesystem($adapter);
|
20 |
+
```
|
vendor/league/flysystem/docs/adapter/zip-archive.md
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/adapter/zip-archive/
|
4 |
+
redirect_from: /adapter/zip-archive/
|
5 |
+
title: ZipArchive Adapter
|
6 |
+
---
|
7 |
+
|
8 |
+
## Installation
|
9 |
+
|
10 |
+
```bash
|
11 |
+
composer require league/flysystem-ziparchive
|
12 |
+
```
|
13 |
+
|
14 |
+
## Usage
|
15 |
+
|
16 |
+
```php
|
17 |
+
use League\Flysystem\Filesystem;
|
18 |
+
use League\Flysystem\ZipArchive\ZipArchiveAdapter;
|
19 |
+
|
20 |
+
$filesystem = new Filesystem(new ZipArchiveAdapter(__DIR__.'/path/to/archive.zip'));
|
21 |
+
```
|
22 |
+
|
23 |
+
### Force Save
|
24 |
+
|
25 |
+
When creating a new zip file it will only be saved at the end of the PHP request because the ZipArchive library relies on an internal `__destruct` method to be called. You can force the saving of the zip file before the end of the request by calling the `close` method on the archive through the adapter.
|
26 |
+
|
27 |
+
```php
|
28 |
+
$filesystem->getAdapter()->getArchive()->close();
|
29 |
+
```
|
vendor/league/flysystem/docs/advanced/caching.md
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/caching/
|
4 |
+
title: Caching
|
5 |
+
---
|
6 |
+
|
7 |
+
File system I/O is slow, so Flysystem uses cached file system meta-data to boost performance. When your application needs to scale you can also choose to use a (shared) persistent caching solution for this.
|
8 |
+
Or enable per request caching (recommended).
|
9 |
+
|
10 |
+
## Installing the adapter cache decorator
|
11 |
+
|
12 |
+
```bash
|
13 |
+
composer require league/flysystem-cached-adapter
|
14 |
+
```
|
15 |
+
|
16 |
+
This package supplies an Adapter decorator which acts as a caching proxy.
|
17 |
+
|
18 |
+
The CachedAdapter (the decorator) caches anything but the file contents. This keeps the cache small enough to be beneficial and covers all the file system inspection operations.
|
19 |
+
|
20 |
+
## Memory Caching
|
21 |
+
|
22 |
+
The easiest way to boost the performance of Flysystem is to add Memory caching.
|
23 |
+
This type of caching will cache everything in the lifetime of the current process (cli-job or http-request).
|
24 |
+
Setting it up is easy:
|
25 |
+
|
26 |
+
```php
|
27 |
+
use League\Flysystem\Filesystem;
|
28 |
+
use League\Flysystem\Adapter\Local as Adapter;
|
29 |
+
use League\Flysystem\Cached\CachedAdapter;
|
30 |
+
use League\Flysystem\Cached\Storage\Memory as MemoryStore;
|
31 |
+
|
32 |
+
// Create the adapter
|
33 |
+
$localAdapter = new Local('/path/to/root');
|
34 |
+
|
35 |
+
// Create the cache store
|
36 |
+
$cacheStore = new MemoryStore();
|
37 |
+
|
38 |
+
// Decorate the adapter
|
39 |
+
$adapter = new CachedAdapter($localAdapter, $cacheStore);
|
40 |
+
|
41 |
+
// And use that to create the file system
|
42 |
+
$filesystem = new Filesystem($adapter);
|
43 |
+
```
|
44 |
+
|
45 |
+
You can now use the file system as you would have before, but caching will be done for you on the fly.
|
46 |
+
|
47 |
+
## Persistent Caching
|
48 |
+
|
49 |
+
The following examples demonstrate how you can setup persistent meta-data caching:
|
50 |
+
|
51 |
+
## Predis Caching Setup
|
52 |
+
|
53 |
+
```php
|
54 |
+
use League\Flysystem\Filesystem;
|
55 |
+
use League\Flysystem\Adapter\Local as Adapter;
|
56 |
+
use League\Flysystem\Cached\CachedAdapter;
|
57 |
+
use League\Flysystem\Cached\Storage\Predis as PredisStore;
|
58 |
+
|
59 |
+
$adapter = new CachedAdapter(new Adapter(__DIR__.'/path/to/root'), new PredisStore);
|
60 |
+
$filesystem = new Filesystem($adapter);
|
61 |
+
|
62 |
+
// Or supply a client
|
63 |
+
$client = new Predis\Client;
|
64 |
+
$adapter = new CachedAdapter(new Adapter(__DIR__.'/path/to/root'), new PredisStore($client));
|
65 |
+
$filesystem = new Filesystem($adapter);
|
66 |
+
```
|
67 |
+
|
68 |
+
## Memcached Caching Setup
|
69 |
+
|
70 |
+
```php
|
71 |
+
use League\Flysystem\Filesystem;
|
72 |
+
use League\Flysystem\Adapter\Local as Adapter;
|
73 |
+
use League\Flysystem\Cached\CachedAdapter;
|
74 |
+
use League\Flysystem\Cached\Storage\Memcached as MemcachedStore;
|
75 |
+
|
76 |
+
$memcached = new Memcached;
|
77 |
+
$memcached->addServer('localhost', 11211);
|
78 |
+
|
79 |
+
$adapter = new CachedAdapter(
|
80 |
+
new Adapter(__DIR__.'/path/to/root'),
|
81 |
+
new MemcachedStore($memcached, 'storageKey', 300)
|
82 |
+
);
|
83 |
+
$filesystem = new Filesystem($adapter);
|
84 |
+
// Storage Key and expire time are optional
|
85 |
+
```
|
86 |
+
|
87 |
+
## Adapter Caching Setup
|
88 |
+
|
89 |
+
```php
|
90 |
+
use Dropbox\Client;
|
91 |
+
use League\Flysystem\Filesystem;
|
92 |
+
use League\Flysystem\Adapter\Dropbox;
|
93 |
+
use League\Flysystem\Adapter\Local;
|
94 |
+
use League\Flysystem\Cached\CachedAdapter;
|
95 |
+
use League\Flysystem\Cached\Storage\Adapter;
|
96 |
+
|
97 |
+
$client = new Client('token', 'app');
|
98 |
+
$dropbox = new Dropbox($client, 'prefix');
|
99 |
+
|
100 |
+
$local = new Local('path');
|
101 |
+
$cache = new Adapter($local, 'file', 300);
|
102 |
+
$adapter = new CachedAdapter($dropbox, $cache);
|
103 |
+
$filesystem = new Filesystem($adapter);
|
104 |
+
```
|
105 |
+
|
106 |
+
## Stash Caching Setup
|
107 |
+
|
108 |
+
```php
|
109 |
+
use Stash\Pool;
|
110 |
+
use League\Flysystem\Adapter\Local as Adapter;
|
111 |
+
use League\Flysystem\Cached\CachedAdapter;
|
112 |
+
use League\Flysystem\Cached\Storage\Stash as StashStore;
|
113 |
+
|
114 |
+
$pool = new Pool();
|
115 |
+
// you can optionally pass a driver (recommended, default: in-memory driver)
|
116 |
+
|
117 |
+
$cache = new StashStore($pool, 'storageKey', 300);
|
118 |
+
// Storage Key and expire time are optional
|
119 |
+
|
120 |
+
$adapter = new CachedAdapter(new Adapter(__DIR__.'/path/to/root'), $cache);
|
121 |
+
$filesystem = new Filesystem($adapter);
|
122 |
+
```
|
123 |
+
|
124 |
+
For list of drivers and configuration options check their [documentation](http://www.stashphp.com/Drivers.html).
|
vendor/league/flysystem/docs/advanced/creating-an-adapter.md
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/creating-an-adapter/
|
4 |
+
title: Creating an adapter
|
5 |
+
---
|
6 |
+
|
7 |
+
If you want to address a file system, and there's no
|
8 |
+
adapter available, you'll need to create your own.
|
9 |
+
|
10 |
+
## What is an adapter
|
11 |
+
|
12 |
+
An adapter can be seen as a plug - it bridges the gap
|
13 |
+
between initially incompatible API's. The job of the adapter
|
14 |
+
is to translate requests into calls the file system
|
15 |
+
understands and re-format responses to comply with
|
16 |
+
the interface of the generic file system.
|
17 |
+
|
18 |
+
An adapter should __NEVER__ be used directly. It should
|
19 |
+
__ONLY__ be used to create a `League\Flysystem\FilesystemInterface`
|
20 |
+
implementation instance.
|
21 |
+
|
22 |
+
## The main interface to implement
|
23 |
+
|
24 |
+
An adapter is required to be an implementation of
|
25 |
+
`League\Flysystem\AdapterInterface`. This interface
|
26 |
+
dictates all the methods that need to be implemented.
|
27 |
+
The interface of an adapter is similar to the
|
28 |
+
`League\Flysystem\FilesystemInterface`, the method
|
29 |
+
names are the same, but the response is often different.
|
30 |
+
|
31 |
+
Responses from adapters are often arrays containing the
|
32 |
+
requested value. This is done because many calls to
|
33 |
+
file systems return more values than initially requested
|
34 |
+
by the client. In order to be able to optimize file system
|
35 |
+
handling, all metadata is returned. For instance, when a
|
36 |
+
`listContents` call not only returns the paths, but also
|
37 |
+
timestamps or other related metadata, this information is
|
38 |
+
not lost. This information is returned through metadata, allowing
|
39 |
+
caching decorators to pick it up, and store for further use.
|
40 |
+
|
41 |
+
### Response values
|
42 |
+
|
43 |
+
key | description | type
|
44 |
+
----------- | ------------------------ | -----------
|
45 |
+
type | `file` or `dir` | `string`
|
46 |
+
path | path to the file or dir | `string`
|
47 |
+
contents | file contents | `string`
|
48 |
+
stream | file contents | `resource`
|
49 |
+
visibility | `public` or `private` | `string`
|
50 |
+
timestamp | modified time | `integer`
|
51 |
+
|
52 |
+
## Sharing the wealth
|
53 |
+
|
54 |
+
Have you created an adapter? Be sure to let us know!
|
55 |
+
Either create an issue on the GitHub repository, or
|
56 |
+
send a PR adding a link to the README. Contributions
|
57 |
+
are always very welcome.
|
vendor/league/flysystem/docs/advanced/mount-manager.md
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/mount-manager/
|
4 |
+
title: Mount Manager
|
5 |
+
---
|
6 |
+
|
7 |
+
Flysystem comes with a wrapper class to easily work with multiple file system instances
|
8 |
+
from a single object. The `League\Flysystem\MountManager` is an easy to use container allowing
|
9 |
+
you to simplify more complex cross file system interactions.
|
10 |
+
|
11 |
+
Setting up a Mount Manager is easy:
|
12 |
+
|
13 |
+
```php
|
14 |
+
$ftp = new League\Flysystem\Filesystem($ftpAdapter);
|
15 |
+
$s3 = new League\Flysystem\Filesystem($s3Adapter);
|
16 |
+
$local = new League\Flysystem\Filesystem($localAdapter);
|
17 |
+
|
18 |
+
// Add them in the constructor
|
19 |
+
$manager = new League\Flysystem\MountManager([
|
20 |
+
'ftp' => $ftp,
|
21 |
+
's3' => $s3,
|
22 |
+
]);
|
23 |
+
|
24 |
+
// Or mount them later
|
25 |
+
$manager->mountFilesystem('local', $local);
|
26 |
+
```
|
27 |
+
|
28 |
+
Now we do all the file operations we'd normally do on a `Flysystem\Filesystem` instance.
|
29 |
+
|
30 |
+
```php
|
31 |
+
// Read from FTP
|
32 |
+
$contents = $manager->read('ftp://some/file.txt');
|
33 |
+
|
34 |
+
// And write to local
|
35 |
+
$manager->write('local://put/it/here.txt', $contents);
|
36 |
+
```
|
37 |
+
|
38 |
+
This makes it easy to code up simple sync strategies.
|
39 |
+
|
40 |
+
```php
|
41 |
+
$contents = $manager->listContents('local://uploads', true);
|
42 |
+
|
43 |
+
foreach ($contents as $entry) {
|
44 |
+
$update = false;
|
45 |
+
|
46 |
+
if ( ! $manager->has('storage://'.$entry['path'])) {
|
47 |
+
$update = true;
|
48 |
+
} elseif ($manager->getTimestamp('local://'.$entry['path']) > $manager->getTimestamp('storage://'.$entry['path'])) {
|
49 |
+
$update = true;
|
50 |
+
}
|
51 |
+
|
52 |
+
if ($update) {
|
53 |
+
$manager->put('storage://'.$entry['path'], $manager->read('local://'.$entry['path']));
|
54 |
+
}
|
55 |
+
}
|
56 |
+
```
|
57 |
+
|
58 |
+
## Specialized calls
|
59 |
+
|
60 |
+
### Copy
|
61 |
+
|
62 |
+
The copy method provided by the Mount Manager takes the origin of the file into account.
|
63 |
+
When it detects the source and destination are located on different file systems it'll
|
64 |
+
use a streamed upload instead, transparently.
|
65 |
+
|
66 |
+
```php
|
67 |
+
$mountManager->copy('local://some/file.ext', 'backup://storage/location.ext');
|
68 |
+
```
|
69 |
+
|
70 |
+
### Move
|
71 |
+
|
72 |
+
The `move` call is the multi-file system counterpart to `rename`. Where rename must be used on
|
73 |
+
the same file system, the `move` call provides the same conceptual behavior, but on two
|
74 |
+
different file systems.
|
75 |
+
|
76 |
+
```php
|
77 |
+
$mountManager->move('local://some/upload.jpeg', 'cdn://users/1/profile-picture.jpeg');
|
78 |
+
```
|
vendor/league/flysystem/docs/advanced/performance.md
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/performance/
|
4 |
+
title: Performance
|
5 |
+
---
|
6 |
+
|
7 |
+
Flysystem aims to be as reliable as possible. In some cases this means doing extra
|
8 |
+
checks to make sure the outcome will be as expected. For some adapters this means Flysystem
|
9 |
+
will make extra calls to assert whether or not a file exists. This improves the reliability
|
10 |
+
but also impacts performance. You can opt out of this behaviour.
|
11 |
+
|
12 |
+
```php
|
13 |
+
use League\Flysystem\Config;
|
14 |
+
use League\Flysystem\Filesystem;
|
15 |
+
|
16 |
+
$local = new Filesystem($localAdapter, new Config([
|
17 |
+
'disable_asserts' => true,
|
18 |
+
]));
|
19 |
+
```
|
20 |
+
|
21 |
+
This will disable the asserts which happen before the following calls: write, writeStream, update,
|
22 |
+
updateStream, copy (2x), and delete.
|
23 |
+
|
24 |
+
This functionality is available since `1.0.26`.
|
vendor/league/flysystem/docs/advanced/plugins.md
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/plugins/
|
4 |
+
title: Plugins
|
5 |
+
---
|
6 |
+
|
7 |
+
Need a feature which is not included in Flysystem's bag of tricks? Write a plugin!
|
8 |
+
|
9 |
+
```php
|
10 |
+
use League\Flysystem\FilesystemInterface;
|
11 |
+
use League\Flysystem\PluginInterface;
|
12 |
+
|
13 |
+
class MaximusAwesomeness implements PluginInterface
|
14 |
+
{
|
15 |
+
protected $filesystem;
|
16 |
+
|
17 |
+
public function setFilesystem(FilesystemInterface $filesystem)
|
18 |
+
{
|
19 |
+
$this->filesystem = $filesystem;
|
20 |
+
}
|
21 |
+
|
22 |
+
public function getMethod()
|
23 |
+
{
|
24 |
+
return 'getDown';
|
25 |
+
}
|
26 |
+
|
27 |
+
public function handle($path = null)
|
28 |
+
{
|
29 |
+
$contents = $this->filesystem->read($path);
|
30 |
+
|
31 |
+
return sha1($contents);
|
32 |
+
}
|
33 |
+
}
|
34 |
+
```
|
35 |
+
|
36 |
+
Now we're ready to use the plugin
|
37 |
+
|
38 |
+
```php
|
39 |
+
use League\Flysystem\Filesystem;
|
40 |
+
use League\Flysystem\Adapter;
|
41 |
+
|
42 |
+
$filesystem = new Filesystem(new Adapter\Local(__DIR__.'/path/to/files/'));
|
43 |
+
$filesystem->addPlugin(new MaximusAwesomeness);
|
44 |
+
$sha1 = $filesystem->getDown('path/to/file');
|
45 |
+
```
|
vendor/league/flysystem/docs/advanced/provided-plugins.md
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/provided-plugins/
|
4 |
+
title: Provided Plugins
|
5 |
+
---
|
6 |
+
|
7 |
+
## List paths.
|
8 |
+
|
9 |
+
This requires the `League\Flysystem\Plugin\ListPaths` plugin.
|
10 |
+
|
11 |
+
|
12 |
+
```php
|
13 |
+
$filesystem->addPlugin(new ListPaths());
|
14 |
+
$paths = $filesystem->listPaths($path, $recursive);
|
15 |
+
|
16 |
+
foreach ($paths as $path) {
|
17 |
+
echo $path;
|
18 |
+
}
|
19 |
+
```
|
20 |
+
|
21 |
+
## List with ensured presence of specific metadata.
|
22 |
+
|
23 |
+
This requires the `League\Flysystem\Plugin\ListWith` plugin.
|
24 |
+
|
25 |
+
```php
|
26 |
+
$filesystem->addPlugin(new ListWith);
|
27 |
+
$listing = $filesystem->listWith(['mimetype', 'size', 'timestamp'], 'optional/path/to/dir', true);
|
28 |
+
|
29 |
+
foreach ($listing as $object) {
|
30 |
+
echo $object['path'].' has mimetype: '.$object['mimetype'];
|
31 |
+
}
|
32 |
+
```
|
33 |
+
|
34 |
+
## Get file info with explicit metadata.
|
35 |
+
|
36 |
+
This requires the `League\Flysystem\Plugin\GetWithMetadata` plugin.
|
37 |
+
|
38 |
+
```php
|
39 |
+
$info = $filesystem->getWithMetadata($path, ['timestamp', 'mimetype']);
|
40 |
+
echo $info['mimetype'];
|
41 |
+
echo $info['timestamp'];
|
42 |
+
```
|
vendor/league/flysystem/docs/advanced/upgrade-to-1.0.0.md
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/advanced/upgrade-to-1.0.0/
|
4 |
+
title: Upgrade to 1.0.0
|
5 |
+
---
|
6 |
+
|
7 |
+
While version 1.0.0 is largely backwards compatible from earlier versions in every
|
8 |
+
day usage, some parts require a different boostrapping.
|
9 |
+
|
10 |
+
## Relocated Adapters
|
11 |
+
|
12 |
+
In order to have better dependency management, and to remove some of the
|
13 |
+
version contstraints, some of the adapters have been moved out of the main
|
14 |
+
repository. These adapters are:
|
15 |
+
|
16 |
+
* [AwsS3: AWS SDK Adapter](/docs/adapter/aws-s3/)
|
17 |
+
* [Dropbox](/docs/adapter/dropbox/)
|
18 |
+
* [Rackspace](/docs/adapter/rackspace/)
|
19 |
+
* [GridFS](/docs/adapter/gridfs/)
|
20 |
+
* [Sftp](/docs/adapter/sftp/)
|
21 |
+
* [WebDAV](/docs/adapter/webdav/)
|
22 |
+
* [ZipArchive](/docs/adapter/zip-archive/)
|
23 |
+
|
24 |
+
## Caching
|
25 |
+
|
26 |
+
Caching has been removed from the main Filesystem class and is now implemented
|
27 |
+
as an adapter decorator.
|
28 |
+
|
29 |
+
### Version 0.x
|
30 |
+
|
31 |
+
```php
|
32 |
+
$filesystem = new Filesystem($adapter, $cacheAdapter);
|
33 |
+
```
|
34 |
+
|
35 |
+
### Version 1.0.0
|
36 |
+
|
37 |
+
Install the required adapter decorator:
|
38 |
+
|
39 |
+
```bash
|
40 |
+
composer require league/flysystem-cached-adapter
|
41 |
+
```
|
42 |
+
|
43 |
+
And convert the bootstrapping to:
|
44 |
+
|
45 |
+
```php
|
46 |
+
use League\Flysystem\Adapter\Local;
|
47 |
+
use League\Flysystem\Cached\CachedAdapter;
|
48 |
+
|
49 |
+
$decoratedAdapter = new CachedAdapter($adapter, $cacheAdapter);
|
50 |
+
$filesystem = new Filesystem($decoratedAdapter);
|
51 |
+
```
|
52 |
+
|
53 |
+
## Helper Methods
|
54 |
+
|
55 |
+
In order to clean up the Filesystem class, some helper functions have been moved to plugins.
|
56 |
+
|
57 |
+
* ListWith
|
58 |
+
* ListPaths
|
59 |
+
* ListFiles
|
60 |
+
* GetWithMetadata
|
61 |
+
* EmptyDir (new)
|
62 |
+
|
63 |
+
|
vendor/league/flysystem/docs/algolia.css
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.algolia-autocomplete {
|
2 |
+
width: 100% !important
|
3 |
+
}
|
4 |
+
|
5 |
+
@media (max-width: 768px) {
|
6 |
+
.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu {
|
7 |
+
max-width: calc(100vw - 2rem) !important;
|
8 |
+
width: calc(100vw - 2rem) !important;
|
9 |
+
min-width: 0 !important;
|
10 |
+
margin-left: 16px !important;
|
11 |
+
right: -3rem !important;
|
12 |
+
}
|
13 |
+
.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before {
|
14 |
+
right: 58px;
|
15 |
+
}
|
16 |
+
.algolia-autocomplete .algolia-docsearch-suggestion--content {
|
17 |
+
width: 100% !important;
|
18 |
+
padding-left: 0 !important;
|
19 |
+
}
|
20 |
+
.algolia-autocomplete .algolia-docsearch-suggestion--content:before {
|
21 |
+
display: none !important;
|
22 |
+
}
|
23 |
+
.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {
|
24 |
+
display: none !important;
|
25 |
+
}
|
26 |
+
}
|
vendor/league/flysystem/docs/api.md
ADDED
@@ -0,0 +1,231 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /api/
|
4 |
+
title: API
|
5 |
+
---
|
6 |
+
|
7 |
+
# API
|
8 |
+
|
9 |
+
## General Usage
|
10 |
+
|
11 |
+
__Write Files__
|
12 |
+
|
13 |
+
~~~ php
|
14 |
+
$filesystem->write('path/to/file.txt', 'contents');
|
15 |
+
~~~
|
16 |
+
|
17 |
+
__Update Files__
|
18 |
+
|
19 |
+
~~~ php
|
20 |
+
$filesystem->update('path/to/file.txt', 'new contents');
|
21 |
+
~~~
|
22 |
+
|
23 |
+
__Write or Update Files__
|
24 |
+
|
25 |
+
~~~ php
|
26 |
+
$filesystem->put('path/to/file.txt', 'contents');
|
27 |
+
~~~
|
28 |
+
|
29 |
+
__Read Files__
|
30 |
+
|
31 |
+
~~~ php
|
32 |
+
$contents = $filesystem->read('path/to/file.txt');
|
33 |
+
~~~
|
34 |
+
|
35 |
+
__Check if a file exists__
|
36 |
+
|
37 |
+
~~~ php
|
38 |
+
$exists = $filesystem->has('path/to/file.txt');
|
39 |
+
~~~
|
40 |
+
|
41 |
+
__NOTE__: This only has consistent behaviour for files, not directories. Directories
|
42 |
+
are less important in Flysystem, they're created implicitly and often ignored because
|
43 |
+
not every adapter (filesystem type) supports directories.
|
44 |
+
|
45 |
+
__Delete Files__
|
46 |
+
|
47 |
+
~~~ php
|
48 |
+
$filesystem->delete('path/to/file.txt');
|
49 |
+
~~~
|
50 |
+
|
51 |
+
__Read and Delete__
|
52 |
+
|
53 |
+
~~~ php
|
54 |
+
$contents = $filesystem->readAndDelete('path/to/file.txt');
|
55 |
+
~~~
|
56 |
+
|
57 |
+
__Rename Files__
|
58 |
+
|
59 |
+
~~~ php
|
60 |
+
$filesystem->rename('filename.txt', 'newname.txt');
|
61 |
+
~~~
|
62 |
+
|
63 |
+
__Copy Files__
|
64 |
+
|
65 |
+
~~~ php
|
66 |
+
$filesystem->copy('filename.txt', 'duplicate.txt');
|
67 |
+
~~~
|
68 |
+
|
69 |
+
__Get Mimetypes__
|
70 |
+
|
71 |
+
~~~ php
|
72 |
+
$mimetype = $filesystem->getMimetype('path/to/file.txt');
|
73 |
+
~~~
|
74 |
+
|
75 |
+
__Get Timestamps__
|
76 |
+
|
77 |
+
~~~ php
|
78 |
+
$timestamp = $filesystem->getTimestamp('path/to/file.txt');
|
79 |
+
~~~
|
80 |
+
|
81 |
+
__Get File Sizes__
|
82 |
+
|
83 |
+
~~~ php
|
84 |
+
$size = $filesystem->getSize('path/to/file.txt');
|
85 |
+
~~~
|
86 |
+
|
87 |
+
__Create Directories__
|
88 |
+
|
89 |
+
~~~ php
|
90 |
+
$filesystem->createDir('path/to/nested/directory');
|
91 |
+
~~~
|
92 |
+
Directories are also made implicitly when writing to a deeper path
|
93 |
+
|
94 |
+
~~~ php
|
95 |
+
$filesystem->write('path/to/file.txt', 'contents');
|
96 |
+
~~~
|
97 |
+
|
98 |
+
__Delete Directories__
|
99 |
+
|
100 |
+
~~~ php
|
101 |
+
$filesystem->deleteDir('path/to/directory');
|
102 |
+
~~~
|
103 |
+
The above method will delete directories recursively
|
104 |
+
|
105 |
+
__NOTE__: All paths used by Flysystem API are relative to the adapter root directory.
|
106 |
+
|
107 |
+
__Manage Visibility__
|
108 |
+
|
109 |
+
Visibility is the abstraction of file permissions across multiple platforms. Visibility can be either public or private.
|
110 |
+
|
111 |
+
~~~ php
|
112 |
+
use League\Flysystem\AdapterInterface;
|
113 |
+
|
114 |
+
$filesystem->write('db.backup', $backup, [
|
115 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
116 |
+
]);
|
117 |
+
|
118 |
+
// or simply
|
119 |
+
|
120 |
+
$filesystem->write('db.backup', $backup, ['visibility' => 'private']);
|
121 |
+
~~~
|
122 |
+
|
123 |
+
You can also change and check visibility of existing files
|
124 |
+
|
125 |
+
~~~ php
|
126 |
+
if ($filesystem->getVisibility('secret.txt') === 'private') {
|
127 |
+
$filesystem->setVisibility('secret.txt', 'public');
|
128 |
+
}
|
129 |
+
~~~
|
130 |
+
|
131 |
+
## Global visibility setting
|
132 |
+
|
133 |
+
You can set the visibility as a default, which prevents you from setting it all over the place.
|
134 |
+
|
135 |
+
~~~ php
|
136 |
+
$filesystem = new League\Flysystem\Filesystem($adapter, [
|
137 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
138 |
+
]);
|
139 |
+
~~~
|
140 |
+
|
141 |
+
__List Contents__
|
142 |
+
|
143 |
+
~~~ php
|
144 |
+
$contents = $filesystem->listContents();
|
145 |
+
~~~
|
146 |
+
|
147 |
+
The result of a contents listing is a collection of arrays containing all the metadata the file manager knows at that time. By default you'll receive path info and file type. Additional info could be supplied by default depending on the adapter used.
|
148 |
+
|
149 |
+
Example:
|
150 |
+
|
151 |
+
~~~ php
|
152 |
+
foreach ($contents as $object) {
|
153 |
+
echo $object['basename'].' is located at '.$object['path'].' and is a '.$object['type'];
|
154 |
+
}
|
155 |
+
~~~
|
156 |
+
|
157 |
+
By default Flysystem lists the top directory non-recursively. You can supply a directory name and recursive boolean to get more precise results
|
158 |
+
|
159 |
+
~~~ php
|
160 |
+
$contents = $filesystem->listContents('some/dir', true);
|
161 |
+
~~~
|
162 |
+
|
163 |
+
__List paths__
|
164 |
+
|
165 |
+
~~~ php
|
166 |
+
$filesystem->addPlugin(new ListPaths());
|
167 |
+
|
168 |
+
$paths = $filesystem->listPaths();
|
169 |
+
|
170 |
+
foreach ($paths as $path) {
|
171 |
+
echo $path;
|
172 |
+
}
|
173 |
+
~~~
|
174 |
+
|
175 |
+
__List with ensured presence of specific metadata__
|
176 |
+
|
177 |
+
~~~ php
|
178 |
+
$listing = $filesystem->listWith(['mimetype', 'size', 'timestamp'], 'optional/path/to/dir', true);
|
179 |
+
|
180 |
+
foreach ($listing as $object) {
|
181 |
+
echo $object['path'].' has mimetype: '.$object['mimetype'];
|
182 |
+
}
|
183 |
+
~~~
|
184 |
+
|
185 |
+
__Get file info with explicit metadata__
|
186 |
+
|
187 |
+
~~~ php
|
188 |
+
$info = $filesystem->getWithMetadata('path/to/file.txt', ['timestamp', 'mimetype']);
|
189 |
+
echo $info['mimetype'];
|
190 |
+
echo $info['timestamp'];
|
191 |
+
~~~
|
192 |
+
|
193 |
+
__NOTE__: This requires the `League\Flysystem\Plugin\GetWithMetadata` plugin.
|
194 |
+
|
195 |
+
## Using streams for reads and writes
|
196 |
+
|
197 |
+
<p class="message-notice">
|
198 |
+
Some SDK's close streams after consuming them, therefore, before calling fclose on the resource, check if it's still valid using <code>is_resource</code>.
|
199 |
+
</p>
|
200 |
+
|
201 |
+
~~~ php
|
202 |
+
$stream = fopen('/path/to/database.backup', 'r+');
|
203 |
+
$filesystem->writeStream('backups/'.strftime('%Y-%m-%d').'.backup', $stream);
|
204 |
+
|
205 |
+
// Using write you can also directly set the visibility
|
206 |
+
$filesystem->writeStream('backups/'.strftime('%Y-%m-%d').'.backup', $stream, [
|
207 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
208 |
+
]);
|
209 |
+
|
210 |
+
if (is_resource($stream)) {
|
211 |
+
fclose($stream);
|
212 |
+
}
|
213 |
+
|
214 |
+
// Or update a file with stream contents
|
215 |
+
$filesystem->updateStream('backups/'.strftime('%Y-%m-%d').'.backup', $stream);
|
216 |
+
|
217 |
+
// Retrieve a read-stream
|
218 |
+
$stream = $filesystem->readStream('something/is/here.ext');
|
219 |
+
$contents = stream_get_contents($stream);
|
220 |
+
fclose($stream);
|
221 |
+
|
222 |
+
// Create or overwrite using a stream.
|
223 |
+
$putStream = tmpfile();
|
224 |
+
fwrite($putStream, $contents);
|
225 |
+
rewind($putStream);
|
226 |
+
$filesystem->putStream('somewhere/here.txt', $putStream);
|
227 |
+
|
228 |
+
if (is_resource($putStream)) {
|
229 |
+
fclose($putStream);
|
230 |
+
}
|
231 |
+
~~~
|
vendor/league/flysystem/docs/architecture.md
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Architecture
|
4 |
+
alternate_title: Architecture
|
5 |
+
permalink: /docs/architecture/
|
6 |
+
---
|
7 |
+
|
8 |
+
Flysystem uses the **adapter pattern**. This pattern is especially
|
9 |
+
useful for mediating API incompatibilities, so it's a perfect fit
|
10 |
+
for our use-case. The `FilesystemInterface` represents the the outside
|
11 |
+
boundary, it defines how you should interact and integrate with
|
12 |
+
Flysystem. This is very important because the default implementation,
|
13 |
+
the `Filesystem` class, plays an important role in handling responses
|
14 |
+
from adapters.
|
15 |
+
|
16 |
+
## Adapter Responses
|
17 |
+
|
18 |
+
Adapter returns results in two forms: a success boolean _or_ a response
|
19 |
+
array. The response array contains several fields:
|
20 |
+
|
21 |
+
key | description | type
|
22 |
+
----------- | ------------------------ | -----------
|
23 |
+
type | `file` or `dir` | `string`
|
24 |
+
path | path to the file or dir | `string`
|
25 |
+
contents | file contents | `string`
|
26 |
+
stream | file contents | `resource`
|
27 |
+
visibility | `public` or `private` | `string`
|
28 |
+
timestamp | modified time | `integer`
|
29 |
+
|
30 |
+
In order to make the most out of every (expensive) filesystem call adapters
|
31 |
+
return as much information as they can when/if available. This makes it possible
|
32 |
+
for caching mechanisms to store this information so subsequent calls can be
|
33 |
+
returned from cache without the need for additional filesystem calls.
|
vendor/league/flysystem/docs/dist/main.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}({0:function(e,t,n){"use strict";n.r(t);n(5);document.querySelectorAll(".highlighter-copy").forEach(e=>e.addEventListener("click",()=>(e=>{let t=window.getSelection(),n=document.createRange();document.execCommand("copy"),n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),window.getSelection().removeAllRanges()})(e.previousSibling)));let o=document.querySelector("#article h2:first-of-type");if(o){let e=document.createElement("script");e.setAttribute("async",!0),e.setAttribute("type","text/javascript"),e.setAttribute("src","//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=flysystemthephpleaguecom"),e.setAttribute("id","_carbonads_js"),o.before(e)}let r=document.getElementById("menu-toggle"),c=document.getElementById("navigation"),i=document.getElementById("article"),l=function(e,t){e.classList.contains(t)?e.classList.remove(t):e.classList.add(t)};r.addEventListener("click",function(e){e.preventDefault(),l(r,"menu-closed"),l(c,"hidden"),l(i,"hidden")})},5:function(e,t){}});
|
vendor/league/flysystem/docs/dist/styles.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
@import url(https://fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans:400,400i,600);/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box;font-family:Open Sans,sans-serif;font-weight:400;-webkit-font-smoothing:antialiased}body{margin:0}article,footer,main,menu,nav,section{display:block}h1{font-size:2em}hr{box-sizing:content-box;height:0;overflow:visible;border-bottom-width:1px;border-top-width:1px;opacity:.75;width:50%;margin:3.5rem auto 2rem;border-color:#d9dff1 #d9dff1 #fff}code,pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects;text-decoration:none;color:#4764bd}strong{font-weight:bolder}small{font-size:80%}sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;top:-.5em}img{border-style:solid;max-width:100%}svg:not(:root){overflow:hidden}input,select{font-size:100%;line-height:1.15;margin:0}input{overflow:visible}select{text-transform:none}[type=reset],[type=submit],html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[hidden]{display:none}*,:after,:before{box-sizing:inherit;border:0 solid #dae1e7}blockquote,h1,h2,h3,p,pre,ul{margin:0}[tabindex="-1"]:focus{outline:0!important}[type=button],[type=reset],[type=submit]{border-radius:0}input,select{font-family:inherit}input::placeholder{color:inherit;opacity:.5}[role=button]{cursor:pointer}div.highlighter-rouge{font-family:Courier,monospace;background-color:#fff;padding:.5rem 1rem;margin-left:-1rem;margin-right:-1rem;margin-bottom:1rem;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);display:block}div.highlighter-rouge>div{overflow:auto;width:100%}@media (min-width:768px){div.highlighter-rouge{margin-left:0;margin-right:0}}code.highlighter-rouge{font-family:Courier,monospace;text-shadow:1px 1px 0 #fff,-1px 1px 0 #fff;font-size:1.125rem}@media (min-width:768px){.highlighter-rouge{margin-left:0;margin-right:0}}div.highlighter-rouge.language-bash{background-color:#4764bd;color:#fff;box-shadow:inset 0 4px 8px 0 rgba(0,0,0,.08),inset 0 2px 4px 0 rgba(0,0,0,.12);text-shadow:1px 1px 2px #253461,-1px 1px 2px #253461}.highlight .cp,.highlight .k,.highlight .o{font-weight:700}.highlight .cp{color:#999}.highlight .c1{color:#998;font-style:italic}.highlight .go{color:#888}.highlight .gt{color:#a00}.highlight .kc{font-weight:700}.highlight .s{color:#d14}.highlight .na{color:teal}.highlight .nb{color:#0086b3}.highlight .nc{color:#458;font-weight:700}.highlight .no{color:teal}.highlight .nf{color:#900;font-weight:700}.highlight .nv{color:teal}.highlight .w{color:#bbb}.highlight .mi,.highlight .mo{color:#099}.highlight .s1,.highlight .s2,.highlight .sd,.highlight .si{color:#d14}.algolia-autocomplete{width:100%!important}@media (max-width:768px){.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{max-width:calc(100vw - 2rem)!important;width:calc(100vw - 2rem)!important;min-width:0!important;margin-left:16px!important;right:-3rem!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:58px}.algolia-autocomplete .algolia-docsearch-suggestion--content{width:100%!important;padding-left:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--content:before,.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{display:none!important}}.container{width:100%}@media (min-width:576px){.container{max-width:576px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:992px){.container{max-width:992px}}@media (min-width:1200px){.container{max-width:1200px}}.list-reset{list-style:none;padding:0}.appearance-none{appearance:none}.bg-black{background-color:#22292f}.bg-grey-lightest{background-color:#f8fafc}.bg-white{background-color:#fff}.bg-indigo-darkest{background-color:#253461}.bg-indigo-dark{background-color:#4764bd}.bg-indigo{background-color:#637fd6}.bg-indigo-light{background-color:#acbdf1}.bg-indigo-lightest{background-color:#f7f9fe}.border-transparent{border-color:transparent}.border-indigo-lighter{border-color:#d9dff1}.rounded{border-radius:.25rem}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}#carbonads>span,.block,.carbon-img img{display:block}.inline-block{display:inline-block}.table{display:table}.hidden{display:none}.flex{display:flex}.items-center{align-items:center}.flex-grow{flex-grow:1}.flex-no-grow{flex-grow:0}.flex-no-shrink{flex-shrink:0}.font-heading{font-family:Lato,sans-serif}.font-normal{font-weight:400}.h-4{height:1rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-full{height:100%}.leading-normal{line-height:1.75}.leading-loose{line-height:2}.m-6{margin:1.5rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mb-4,p,ul{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.max-w-xs{max-width:20rem}.max-w-sm{max-width:30rem}.max-w-2xl{max-width:66rem}.max-w-full{max-width:100%}.min-h-screen{min-height:100vh}.min-w-full{min-width:100%}.-ml-2{margin-left:-.5rem}.opacity-50{opacity:.5}.overflow-hidden{overflow:hidden}.p-1{padding:.25rem}.p-2{padding:.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pb-1{padding-bottom:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pl-2{padding-left:.5rem}.pt-4{padding-top:1rem}.pr-6{padding-right:1.5rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pt-12{padding-top:4rem}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.pin-y{top:0;bottom:0}.pin-t{top:0}.pin-l{left:0}.shadow-md{box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08)}.fill-current{fill:currentColor}.text-center{text-align:center}.hover\:text-grey:hover,.text-grey{color:#b8c2cc}.text-white{color:#fff}.text-indigo-darkest{color:#253461}.text-indigo-body-text{color:#535e7e}.text-indigo-darker{color:#2a3f7d}.text-indigo-dark{color:#4764bd}.text-indigo{color:#637fd6}.text-indigo-light{color:#acbdf1}.text-xs{font-size:.75rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-3xl{font-size:1.875rem}.uppercase{text-transform:uppercase}.tracking-wide{letter-spacing:.05em}.w-4{width:1rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-1\/3{width:33.33333%}.w-1\/4{width:25%}.w-full{width:100%}.w-screen{width:100vw}.z-10{z-index:1}.z-50{z-index:2}:focus{outline:0}h1,h2,h3{font-family:Lato,sans-serif;line-height:1.25;color:#253461}.focus\:placeholder-none:focus::placeholder{opacity:0}article table{text-align:left;padding:1rem;background-color:#fff;box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08);margin-left:-1rem;margin-right:-1rem;border-spacing:0;border-collapse:collapse;margin-bottom:1.5rem;padding:0;width:calc(100% + 2rem);overflow:auto}@media (min-width:768px){article table{display:table;width:100%;margin-left:0;margin-right:0}}div.highlighter-rouge+table{margin-top:-1rem;border-top-width:4px;border-color:#4764bd}article table td{vertical-align:top;border-top-width:1px;border-color:#d9dff1;padding:.5rem 1rem}article table th{padding:.5rem 1rem;background-color:#637fd6;color:#fff;font-weight:700}div.highlighter-rouge+table th{color:#637fd6;background-color:#fff}.menu-closed .menu-closed\:shown{display:inline}.menu-closed .menu-closed\:hidden,.menu-closed\:shown{display:none}#carbonads{position:relative;text-shadow:1px 1px 0 hsla(0,0%,100%,.5);background:#fff;max-width:340px;line-height:1.75;font-size:.8rem;color:#3d4852;padding:.5rem;margin-bottom:1rem;background-color:#dae1e7;border-radius:.25rem;box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);display:inline-block}.carbon-text{padding-left:.5rem;padding-bottom:1rem;line-height:1.75;color:#fff}#carbonads a{color:inherit}.carbon-wrap{display:flex;align-items:start}.carbon-img{flex-grow:0;flex-shrink:0}.carbon-poweredby{position:absolute;left:calc(130px + 1rem);bottom:0;opacity:.75;padding-bottom:.5rem}@media (max-width:576px){.-sm\:hidden{display:none}}@media (min-width:576px){.sm\:block{display:block}.sm\:hidden{display:none}.sm\:m-8{margin:2rem}}@media (min-width:576px) and (max-width:768px){.sm-md\:block{display:block}}@media (min-width:768px){.md\:block{display:block}.md\:hidden{display:none}.md\:w-4\/14{width:28.57143%}.md\:w-10\/14{width:71.42857%}}@media (min-width:768px) and (max-width:992px){.md-lg\:block{display:block}}@media (min-width:992px){.lg\:relative{position:relative}}@media (min-width:992px) and (max-width:1200px){.lg-xl\:block{display:block}}@media (min-width:1200px){.xl\:block{display:block}}
|
vendor/league/flysystem/docs/favicon-16x16.png
ADDED
Binary file
|
vendor/league/flysystem/docs/favicon-32x32.png
ADDED
Binary file
|
vendor/league/flysystem/docs/favicon.ico
ADDED
Binary file
|
vendor/league/flysystem/docs/github.css
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* GitHub style for Pygments syntax highlighter, for use with Jekyll
|
3 |
+
* Courtesy of GitHub.com
|
4 |
+
*/
|
5 |
+
|
6 |
+
div.highlighter-rouge {
|
7 |
+
font-family: Courier, monospace;
|
8 |
+
@apply bg-white px-4 py-2 -mx-4 mb-4 shadow block;
|
9 |
+
}
|
10 |
+
|
11 |
+
div.highlighter-rouge > div {
|
12 |
+
@apply overflow-auto w-full;
|
13 |
+
}
|
14 |
+
|
15 |
+
@screen md {
|
16 |
+
div.highlighter-rouge {
|
17 |
+
@apply -mx-0;
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
code.highlighter-rouge {
|
22 |
+
font-family: Courier, monospace;
|
23 |
+
text-shadow: 1px 1px 0px #fff, -1px 1px 0px #fff;
|
24 |
+
@apply text-lg;
|
25 |
+
}
|
26 |
+
|
27 |
+
@screen md {
|
28 |
+
.highlighter-rouge {
|
29 |
+
@apply -mx-0;
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
div.highlighter-rouge.language-bash {
|
34 |
+
@apply bg-indigo-dark text-white shadow-inner-md;
|
35 |
+
text-shadow: 1px 1px 2px #253461, -1px 1px 2px #253461;
|
36 |
+
}
|
37 |
+
|
38 |
+
.highlight .c { color: #999988; font-style: italic; }
|
39 |
+
.highlight .err { color: #a61717; background-color: #e3d2d2; }
|
40 |
+
.highlight .k { font-weight: bold; }
|
41 |
+
.highlight .o { font-weight: bold; }
|
42 |
+
.highlight .cm { color: #999988; font-style: italic; }
|
43 |
+
.highlight .cp { color: #999999; font-weight: bold; }
|
44 |
+
.highlight .c1 { color: #999988; font-style: italic; }
|
45 |
+
.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
|
46 |
+
.highlight .gd { color: #000000; background-color: #ffdddd; }
|
47 |
+
.highlight .gd .x { color: #000000; background-color: #ffaaaa; }
|
48 |
+
.highlight .ge { font-style: italic; }
|
49 |
+
.highlight .gr { color: #aa0000; }
|
50 |
+
.highlight .gh { color: #999999; }
|
51 |
+
.highlight .gi { color: #000000; background-color: #ddffdd; }
|
52 |
+
.highlight .gi .x { color: #000000; background-color: #aaffaa; }
|
53 |
+
.highlight .go { color: #888888; }
|
54 |
+
.highlight .gp { color: #555555; }
|
55 |
+
.highlight .gs { font-weight: bold; }
|
56 |
+
.highlight .gu { color: #800080; font-weight: bold; }
|
57 |
+
.highlight .gt { color: #aa0000; }
|
58 |
+
.highlight .kc { font-weight: bold; }
|
59 |
+
.highlight .kd { font-weight: bold; }
|
60 |
+
.highlight .kn { font-weight: bold; }
|
61 |
+
.highlight .kp { font-weight: bold; }
|
62 |
+
.highlight .kr { font-weight: bold; }
|
63 |
+
.highlight .kt { color: #445588; font-weight: bold; }
|
64 |
+
.highlight .m { color: #009999; }
|
65 |
+
.highlight .s { color: #dd1144; }
|
66 |
+
.highlight .n { color: #333333; }
|
67 |
+
.highlight .na { color: teal; }
|
68 |
+
.highlight .nb { color: #0086b3; }
|
69 |
+
.highlight .nc { color: #445588; font-weight: bold; }
|
70 |
+
.highlight .no { color: teal; }
|
71 |
+
.highlight .ni { color: purple; }
|
72 |
+
.highlight .ne { color: #990000; font-weight: bold; }
|
73 |
+
.highlight .nf { color: #990000; font-weight: bold; }
|
74 |
+
.highlight .nn { color: #555555; }
|
75 |
+
.highlight .nt { color: navy; }
|
76 |
+
.highlight .nv { color: teal; }
|
77 |
+
.highlight .ow { font-weight: bold; }
|
78 |
+
.highlight .w { color: #bbbbbb; }
|
79 |
+
.highlight .mf { color: #009999; }
|
80 |
+
.highlight .mh { color: #009999; }
|
81 |
+
.highlight .mi { color: #009999; }
|
82 |
+
.highlight .mo { color: #009999; }
|
83 |
+
.highlight .sb { color: #dd1144; }
|
84 |
+
.highlight .sc { color: #dd1144; }
|
85 |
+
.highlight .sd { color: #dd1144; }
|
86 |
+
.highlight .s2 { color: #dd1144; }
|
87 |
+
.highlight .se { color: #dd1144; }
|
88 |
+
.highlight .sh { color: #dd1144; }
|
89 |
+
.highlight .si { color: #dd1144; }
|
90 |
+
.highlight .sx { color: #dd1144; }
|
91 |
+
.highlight .sr { color: #009926; }
|
92 |
+
.highlight .s1 { color: #dd1144; }
|
93 |
+
.highlight .ss { color: #990073; }
|
94 |
+
.highlight .bp { color: #999999; }
|
95 |
+
.highlight .vc { color: teal; }
|
96 |
+
.highlight .vg { color: teal; }
|
97 |
+
.highlight .vi { color: teal; }
|
98 |
+
.highlight .il { color: #009999; }
|
99 |
+
.highlight .gc { color: #999; background-color: #EAF2F5; }
|
vendor/league/flysystem/docs/guides/deterministic-programming.md
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Deterministic Programming
|
4 |
+
permalink: /docs/guides/deterministic-programming/
|
5 |
+
---
|
6 |
+
|
7 |
+
Deterministic programming is a great way to approach handling filesystems
|
8 |
+
in PHP. Deterministic means that given a certain input you'll always get
|
9 |
+
the same output. When we apply this approach to handling filesystems we're
|
10 |
+
able to mitigate many of the things that make filesystem handling
|
11 |
+
problematic.
|
12 |
+
|
13 |
+
## Filesystems are slow.
|
14 |
+
|
15 |
+
In general, filesystem interaction is slow. Every operation that
|
16 |
+
hits the disc in one way or another is slow. While some operations absolutely
|
17 |
+
require filesystem interaction, there's a number of cases where filesystem
|
18 |
+
operations can be prevented in order to eliminate the associated penalties.
|
19 |
+
|
20 |
+
## Caching metadata.
|
21 |
+
|
22 |
+
Whenever we store files uploaded by the user it's good to immediately store
|
23 |
+
any associated metadata with them if you'll need to use that later on. By storing
|
24 |
+
the metadata we've limited the expense of the filesystem call to a single time.
|
25 |
+
All subsequent calls can use the cached value. This is particularly effective
|
26 |
+
because most files don't change after they're uploaded.
|
27 |
+
|
28 |
+
## Deterministic file locations.
|
29 |
+
|
30 |
+
File storage organization can be a tricky thing. Much like "naming things" this
|
31 |
+
task often isn't as trivial as it may seem. Creating a naming scheme for your
|
32 |
+
files can help a lot. For example:
|
33 |
+
|
34 |
+
```text
|
35 |
+
/users/profile_pictures/{user_id}_{size}.png
|
36 |
+
/blog/posts/{post_id}_header.png
|
37 |
+
/blog/posts/{post_id}_preview.png
|
38 |
+
```
|
39 |
+
|
40 |
+
Once you've got the pattern, you can formalize this in a class:
|
41 |
+
|
42 |
+
```php
|
43 |
+
<?php
|
44 |
+
|
45 |
+
class FilePathGenerator
|
46 |
+
{
|
47 |
+
public function userProfilePicture($userId, $size): string
|
48 |
+
{
|
49 |
+
return "/users/profile_pictures/{$userId}_{$size}.png";
|
50 |
+
}
|
51 |
+
}
|
52 |
+
```
|
53 |
+
|
54 |
+
The generated path can be used as the storage, but it can also
|
55 |
+
be used as a deterministic lookup mechanism. Instead of guessing
|
56 |
+
where a file might be, you'll now know for sure.
|
57 |
+
|
58 |
+
By doing this you'll prevent searches for files and limit it to
|
59 |
+
a single `file_exists` check if you need to be sure the file exists.
|
60 |
+
For Flysystem this would be a `$filesystem->has($path);` call.
|
61 |
+
|
62 |
+
## Storing all file locations.
|
63 |
+
|
64 |
+
In order to get rid of almost all the penalties caused by filesystems
|
65 |
+
you can store all the paths in a persistent database. While this is
|
66 |
+
not a conventional thing to do it certainly has a lot of benefits.
|
67 |
+
|
68 |
+
File listings are just a select statement: `SELECT * FROM files WHERE path LIKE '/prefix/%'`.
|
69 |
+
Listings can easily be sorted. File existence checks are inexpensive.
|
70 |
+
File migrations become really easy, even when your path generation
|
71 |
+
strategy changes. Metadata can be stored alongside your path.
|
vendor/league/flysystem/docs/guides/laravel-usage.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/guides/laravel-usage/
|
4 |
+
title: Laravel Usage
|
5 |
+
---
|
6 |
+
|
7 |
+
## Laravel Usage
|
8 |
+
|
9 |
+
Flysystem is shipped with the default installation of Laravel. It also provides a tight
|
10 |
+
integration with the framework. For more information on how to use Flysystem within
|
11 |
+
Laravel, <a href="https://laravel.com/docs/5.6/filesystem">check out the documentation</a>.
|
12 |
+
|
13 |
+
<div class="flex my-6">
|
14 |
+
<a target="_blank" href="https://laravel.com" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
15 |
+
<img src="/img/laravel.svg" class="w-full" alt="Laravel.com"/>
|
16 |
+
<span style="background-color: #FB503B" class="text-center text-xl hidden sm:block py-4 bg-indigo-dark text-white bg-grey-lightest">Laravel.com</span>
|
17 |
+
</a>
|
18 |
+
</div>
|
vendor/league/flysystem/docs/guides/uploads.md
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/guides/uploads/
|
4 |
+
redirect_from: /recipes/
|
5 |
+
title: Handling Uploads
|
6 |
+
---
|
7 |
+
|
8 |
+
## Plain PHP Upload
|
9 |
+
|
10 |
+
```php
|
11 |
+
$stream = fopen($_FILES[$uploadname]['tmp_name'], 'r+');
|
12 |
+
$filesystem->writeStream(
|
13 |
+
'uploads/'.$_FILES[$uploadname]['name'],
|
14 |
+
$stream
|
15 |
+
);
|
16 |
+
fclose($stream);
|
17 |
+
```
|
18 |
+
|
19 |
+
## Laravel 5 - DI
|
20 |
+
|
21 |
+
```php
|
22 |
+
<?php
|
23 |
+
|
24 |
+
namespace App\Http\Controllers;
|
25 |
+
|
26 |
+
use League\Flysystem\FilesystemInterface;
|
27 |
+
use Illuminate\Routing\Controller;
|
28 |
+
use Illuminate\Routing\Controller;
|
29 |
+
|
30 |
+
class UploadController extends Controller
|
31 |
+
{
|
32 |
+
public function store(
|
33 |
+
Request $request,
|
34 |
+
FilesystemInterface $filesystem
|
35 |
+
) {
|
36 |
+
$file = $request->file('upload');
|
37 |
+
$stream = fopen($file->getRealPath(), 'r+');
|
38 |
+
$filesystem->writeStream(
|
39 |
+
'uploads/'.$file->getClientOriginalName(),
|
40 |
+
$stream
|
41 |
+
);
|
42 |
+
fclose($stream);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
```
|
46 |
+
|
47 |
+
## Symfony Upload
|
48 |
+
|
49 |
+
```php
|
50 |
+
/** @var Symfony\Component\HttpFoundation\Request $request */
|
51 |
+
/** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
|
52 |
+
$file = $request->files->get($uploadname);
|
53 |
+
|
54 |
+
if ($file->isValid()) {
|
55 |
+
$stream = fopen($file->getRealPath(), 'r+');
|
56 |
+
$filesystem->writeStream('uploads/'.$file->getClientOriginalName(), $stream);
|
57 |
+
fclose($stream);
|
58 |
+
}
|
59 |
+
```
|
60 |
+
|
61 |
+
## Laravel 4/5 - Static-Access Proxy
|
62 |
+
|
63 |
+
```php
|
64 |
+
$file = Request::file($uploadname);
|
65 |
+
|
66 |
+
if ($file->isValid()) {
|
67 |
+
$stream = fopen($file->getRealPath(), 'r+');
|
68 |
+
$filesystem->writeStream('uploads/'.$file->getClientOriginalName(), $stream);
|
69 |
+
fclose($stream);
|
70 |
+
}
|
71 |
+
```
|
72 |
+
|
73 |
+
## Yii 2 Upload
|
74 |
+
|
75 |
+
```php
|
76 |
+
<?php
|
77 |
+
|
78 |
+
namespace app\controllers;
|
79 |
+
|
80 |
+
use yii\web\Controller;
|
81 |
+
use yii\web\UploadedFile;
|
82 |
+
|
83 |
+
class FileController extends Controller
|
84 |
+
{
|
85 |
+
public function actionUpload()
|
86 |
+
{
|
87 |
+
$file = UploadedFile::getInstanceByName($uploadname);
|
88 |
+
|
89 |
+
if ($file->error === UPLOAD_ERR_OK) {
|
90 |
+
$stream = fopen($file->tempName, 'r+');
|
91 |
+
$filesystem->writeStream('uploads/'.$file->name, $stream);
|
92 |
+
fclose($stream);
|
93 |
+
}
|
94 |
+
}
|
95 |
+
}
|
96 |
+
```
|
vendor/league/flysystem/docs/img/azure.svg
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
+
viewBox="0 0 283.5 283.5" style="enable-background:new 0 0 283.5 283.5;" xml:space="preserve">
|
5 |
+
<style type="text/css">
|
6 |
+
.st0{fill:#737373;}
|
7 |
+
.st1{fill:#F25022;}
|
8 |
+
.st2{fill:#7FBA00;}
|
9 |
+
.st3{fill:#00A4EF;}
|
10 |
+
.st4{fill:#FFB900;}
|
11 |
+
</style>
|
12 |
+
<g id="Azure_s">
|
13 |
+
<g>
|
14 |
+
<path class="st0" d="M118.8,147.7l11.4,30.3h-5.8l-2.7-7.5h-11.9l-2.6,7.5h-5.8l11.4-30.3H118.8z M115.6,153.3l-4.5,12.8h9.1
|
15 |
+
L115.6,153.3L115.6,153.3z"/>
|
16 |
+
<path class="st0" d="M132.7,156.3h17.4v2.1L138.7,174h11.5v4.1H132v-2.4l11.2-15.2h-10.4v-4.2L132.7,156.3L132.7,156.3z"/>
|
17 |
+
<path class="st0" d="M171.9,156.3V178h-5.2v-2.9h-0.1c-0.7,1-1.6,1.8-2.7,2.3c-1.1,0.6-2.4,0.8-3.8,0.8c-2.5,0-4.4-0.7-5.8-2.1
|
18 |
+
c-1.3-1.4-2-3.7-2-6.7v-13.2h5.2v12.6c0,1.8,0.4,3.2,1.1,4.1c0.7,0.9,1.8,1.4,3.3,1.4s2.6-0.5,3.5-1.5s1.3-2.4,1.3-4v-12.6
|
19 |
+
L171.9,156.3L171.9,156.3z"/>
|
20 |
+
<path class="st0" d="M187.3,155.9c0.4,0,0.8,0,1.1,0.1s0.6,0.1,0.8,0.2v5.2c-0.3-0.2-0.7-0.4-1.2-0.6c-0.5-0.2-1.1-0.3-1.9-0.3
|
21 |
+
c-1.3,0-2.3,0.5-3.2,1.6s-1.3,2.7-1.3,4.9v11h-5.1v-21.7h5.1v3.4h0.1c0.5-1.2,1.2-2.1,2.1-2.8C184.9,156.3,186,155.9,187.3,155.9z
|
22 |
+
"/>
|
23 |
+
<path class="st0" d="M207.7,172.5v4.2c-0.8,0.5-2,1-3.3,1.3c-1.4,0.3-2.8,0.5-4.4,0.5c-3.3,0-5.9-1-7.7-2.9s-2.8-4.7-2.8-8.2
|
24 |
+
c0-3.4,1-6.1,2.9-8.3s4.5-3.3,7.5-3.3s5.3,0.9,7,2.8c1.7,1.8,2.5,4.4,2.5,7.6v2.5h-14.9c0.2,2.2,0.9,3.7,2.1,4.6
|
25 |
+
c1.2,0.9,2.7,1.3,4.6,1.3c1.2,0,2.4-0.2,3.5-0.6C205.8,173.6,206.8,173.1,207.7,172.5z M204.4,164.9c0-1.7-0.4-3-1.2-3.9
|
26 |
+
s-1.9-1.3-3.3-1.3c-1.2,0-2.3,0.4-3.3,1.3s-1.6,2.2-1.9,3.9H204.4z"/>
|
27 |
+
</g>
|
28 |
+
</g>
|
29 |
+
<g id="MS-logotype">
|
30 |
+
<path class="st0" d="M136,106v30.3h-5.3v-23.8h-0.1l-9.4,23.8h-3.5l-9.6-23.8H108v23.8h-4.9V106h7.5l8.7,22.5h0.1l9.2-22.5H136z
|
31 |
+
M140.4,108.3c0-0.8,0.3-1.6,0.9-2.1c0.6-0.6,1.3-0.9,2.2-0.9s1.6,0.3,2.2,0.9c0.6,0.6,0.9,1.3,0.9,2.1c0,0.8-0.3,1.5-0.9,2.1
|
32 |
+
c-0.6,0.6-1.3,0.8-2.2,0.8s-1.6-0.3-2.2-0.9C140.7,109.8,140.4,109.1,140.4,108.3z M146.1,114.6v21.7H141v-21.7
|
33 |
+
C141,114.6,146.1,114.6,146.1,114.6z M161.6,132.6c0.8,0,1.6-0.2,2.5-0.5c0.9-0.4,1.8-0.8,2.5-1.4v4.8c-0.8,0.5-1.7,0.8-2.8,1.1
|
34 |
+
c-1,0.2-2.2,0.4-3.4,0.4c-3.2,0-5.8-1-7.8-3s-3-4.6-3-7.7c0-3.5,1-6.4,3.1-8.6c2-2.3,4.9-3.4,8.7-3.4c1,0,1.9,0.1,2.9,0.4
|
35 |
+
c1,0.2,1.8,0.5,2.3,0.9v4.9c-0.8-0.6-1.6-1-2.4-1.3c-0.8-0.3-1.7-0.5-2.5-0.5c-2,0-3.6,0.7-4.9,2c-1.2,1.3-1.9,3.1-1.9,5.3
|
36 |
+
s0.6,3.9,1.8,5.1C157.9,132,159.6,132.6,161.6,132.6z M181.2,114.2c0.4,0,0.8,0,1.1,0.1s0.6,0.1,0.8,0.2v5.2
|
37 |
+
c-0.3-0.2-0.7-0.4-1.2-0.6s-1.1-0.3-1.9-0.3c-1.3,0-2.3,0.5-3.2,1.6s-1.3,2.7-1.3,4.9v11h-5.1v-21.7h5.1v3.4h0.1
|
38 |
+
c0.5-1.2,1.2-2.1,2.1-2.8C178.8,114.6,179.9,114.2,181.2,114.2z M183.4,125.8c0-3.6,1-6.4,3-8.5s4.8-3.2,8.5-3.2c3.4,0,6.1,1,8,3
|
39 |
+
s2.9,4.8,2.9,8.2c0,3.5-1,6.3-3,8.4c-2,2.1-4.8,3.1-8.3,3.1c-3.4,0-6-1-8-3C184.4,131.9,183.4,129.2,183.4,125.8z M188.8,125.6
|
40 |
+
c0,2.3,0.5,4,1.5,5.2s2.5,1.8,4.4,1.8s3.3-0.6,4.2-1.8c1-1.2,1.5-3,1.5-5.3s-0.5-4.1-1.5-5.3c-1-1.2-2.4-1.8-4.2-1.8
|
41 |
+
c-1.9,0-3.3,0.6-4.4,1.9C189.3,121.5,188.8,123.3,188.8,125.6z M213.4,120.3c0,0.7,0.2,1.3,0.7,1.7c0.5,0.4,1.5,0.9,3.1,1.6
|
42 |
+
c2,0.8,3.5,1.7,4.3,2.8c0.8,1,1.2,2.3,1.2,3.7c0,2-0.8,3.7-2.4,4.9c-1.6,1.2-3.7,1.9-6.4,1.9c-0.9,0-1.9-0.1-3-0.3s-2-0.5-2.8-0.8
|
43 |
+
v-5c0.9,0.6,1.9,1.2,3,1.5c1.1,0.4,2,0.6,2.9,0.6c1.2,0,2-0.2,2.6-0.5s0.8-0.9,0.8-1.6c0-0.7-0.3-1.3-0.9-1.8s-1.7-1-3.2-1.7
|
44 |
+
c-1.9-0.8-3.2-1.7-4-2.7s-1.2-2.2-1.2-3.8c0-2,0.8-3.6,2.3-4.8c1.6-1.3,3.6-1.9,6.1-1.9c0.8,0,1.6,0.1,2.6,0.3
|
45 |
+
c0.9,0.2,1.7,0.4,2.4,0.7v4.9c-0.7-0.5-1.5-0.8-2.4-1.2c-0.9-0.3-1.8-0.5-2.7-0.5c-1,0-1.7,0.2-2.3,0.6
|
46 |
+
C213.6,119.1,213.4,119.6,213.4,120.3z M224.9,125.8c0-3.6,1-6.4,3-8.5s4.8-3.2,8.5-3.2c3.4,0,6.1,1,8,3s2.9,4.8,2.9,8.2
|
47 |
+
c0,3.5-1,6.3-3,8.4c-2,2.1-4.8,3.1-8.3,3.1c-3.4,0-6-1-8-3C225.9,131.9,224.9,129.2,224.9,125.8z M230.2,125.6c0,2.3,0.5,4,1.5,5.2
|
48 |
+
s2.5,1.8,4.4,1.8s3.3-0.6,4.2-1.8c1-1.2,1.5-3,1.5-5.3s-0.5-4.1-1.5-5.3c-1-1.2-2.4-1.8-4.2-1.8c-1.9,0-3.3,0.6-4.4,1.9
|
49 |
+
C230.7,121.5,230.2,123.3,230.2,125.6z M264.2,118.8h-7.6v17.5h-5.2v-17.5h-3.6v-4.2h3.6v-3c0-2.3,0.7-4.2,2.2-5.6
|
50 |
+
c1.5-1.5,3.4-2.2,5.7-2.2c0.6,0,1.2,0,1.6,0.1c0.5,0.1,0.9,0.2,1.3,0.3v4.4c-0.2-0.1-0.5-0.2-0.9-0.4c-0.4-0.1-0.9-0.2-1.5-0.2
|
51 |
+
c-1.1,0-1.9,0.3-2.5,1s-0.9,1.7-0.9,3v2.6h7.6v-4.9l5.1-1.6v6.4h5.2v4.2h-5.2V129c0,1.3,0.2,2.3,0.7,2.8s1.3,0.8,2.3,0.8
|
52 |
+
c0.3,0,0.7-0.1,1.1-0.2c0.4-0.1,0.8-0.3,1.1-0.5v4.2c-0.3,0.2-0.9,0.4-1.6,0.5s-1.5,0.2-2.2,0.2c-2.2,0-3.8-0.6-4.9-1.7
|
53 |
+
c-1.1-1.1-1.6-2.9-1.6-5.2v-11.1C264,118.8,264.2,118.8,264.2,118.8z"/>
|
54 |
+
</g>
|
55 |
+
<g id="MS-symbol">
|
56 |
+
<g>
|
57 |
+
<rect x="9.6" y="106" class="st1" width="34.2" height="34.2"/>
|
58 |
+
<rect x="47.4" y="106" class="st2" width="34.2" height="34.2"/>
|
59 |
+
<rect x="9.6" y="143.8" class="st3" width="34.2" height="34.2"/>
|
60 |
+
<rect x="47.4" y="143.8" class="st4" width="34.2" height="34.2"/>
|
61 |
+
</g>
|
62 |
+
<g>
|
63 |
+
<rect x="9.6" y="106" class="st1" width="34.2" height="34.2"/>
|
64 |
+
<rect x="47.4" y="106" class="st2" width="34.2" height="34.2"/>
|
65 |
+
<rect x="9.6" y="143.8" class="st3" width="34.2" height="34.2"/>
|
66 |
+
<rect x="47.4" y="143.8" class="st4" width="34.2" height="34.2"/>
|
67 |
+
</g>
|
68 |
+
</g>
|
69 |
+
</svg>
|
vendor/league/flysystem/docs/img/become_a_patron_button.png
ADDED
Binary file
|
vendor/league/flysystem/docs/img/flysystem.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 200 200"><defs><linearGradient id="b" x1="0%" y1="0%" y2="100%"><stop offset="0%" stop-color="#4764BD"/><stop offset="100%" stop-color="#23325E"/></linearGradient><path id="a" d="M0 0h200v200H0z"/></defs><g fill="none" fill-rule="evenodd"><use fill="#4764BD" xlink:href="#a"/><use fill="url(#b)" xlink:href="#a"/><path fill="#000" fill-opacity=".3" d="M40 40h116l43.999219 44v116H84.0086426L40 156z" style="mix-blend-mode:multiply"/><path fill="#FFF" d="M40 40h36v36H40z"/><path fill="#FFF" fill-opacity=".75" d="M80 116H40V80h76v36H80z"/><path fill="#FFF" fill-opacity=".88" d="M120 76H80V40h76v36h-36z"/><path fill="#FFF" d="M40 120h36v36H40z"/></g></svg>
|
vendor/league/flysystem/docs/img/laravel.svg
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
+
viewBox="0 0 700 700" style="enable-background:new 0 0 700 700;" xml:space="preserve">
|
5 |
+
<path fill="#FB503B" d="M556.8,344.2c-2.9-3.2-42.3-52.6-49.3-61c-7-8.4-10.3-6.9-14.6-6.2s-54.2,9-60,10c-5.8,1-9.4,3.3-5.9,8.3
|
6 |
+
c3.2,4.4,36,51,43.2,61.2l-130.5,31.3L236.1,214.3c-4.1-6.1-5-8.3-14.4-7.8c-9.4,0.4-81.4,6.4-86.5,6.8c-5.1,0.4-10.8,2.7-5.6,14.8
|
7 |
+
c5.1,12.1,86.9,188.3,89.2,193.4c2.3,5.1,8.2,13.4,22.1,10.1c14.2-3.4,63.5-16.3,90.4-23.3c14.2,25.8,43.3,78,48.6,85.5
|
8 |
+
c7.2,10,12.1,8.3,23.1,5c8.6-2.6,134.4-47.8,140.1-50.2c5.7-2.3,9.2-4,5.3-9.7c-2.8-4.2-36-48.6-53.4-71.9
|
9 |
+
c11.9-3.2,54.2-14.4,58.8-15.7C559,350,559.7,347.4,556.8,344.2z M319.6,392.7c-1.6,0.3-74.6,17.8-78.5,18.7
|
10 |
+
c-3.9,0.9-3.9,0.4-4.3-0.9c-0.4-1.3-86.9-179.6-88.1-181.8c-1.2-2.2-1.1-4,0-4c1.1,0,69-6.1,71.4-6.2s2.1,0.4,3,1.9
|
11 |
+
c0,0,95.7,165.2,97.4,168.1C322.2,391.5,321.2,392.4,319.6,392.7z M525.7,431.3c1.2,1.8,2.3,3-1.3,4.3c-3.7,1.3-123.7,41.8-126,42.8
|
12 |
+
c-2.3,1-4.2,1.3-7.2-3s-42-71.9-42-71.9l127.2-33.1c3.2-1,4.2-1.7,6.2,1.5S524.5,429.5,525.7,431.3z M533.8,341
|
13 |
+
c-2.9,0.6-49.6,12.2-49.6,12.2l-38.2-52.4c-1.1-1.5-2-3,0.7-3.4c2.7-0.4,46.1-8.2,48-8.6c2-0.4,3.7-1,6.1,2.3
|
14 |
+
c2.4,3.3,35.4,45.1,36.7,46.7C538.8,339.4,536.7,340.4,533.8,341z"/>
|
15 |
+
</svg>
|
vendor/league/flysystem/docs/img/question.svg
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
2 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="#ACBDF1" fill-rule="evenodd">
|
3 |
+
<g id="icon-shape">
|
4 |
+
<path d="M14,7 C14,7.81404368 13.5749107,8.83930284 12.9961487,9.4180649 L11.4180649,10.9961487 C11.2143227,11.1998909 11,11.7148676 11,12 L11,13 L9,13 L9,12 C9,11.1832235 9.42588582,10.1599006 10.0038513,9.5819351 L11.5819351,8.00385134 C11.7857992,7.79998728 12,7.28336316 12,7 C12,5.8954305 11.1045695,5 10,5 C8.8954305,5 8,5.8954305 8,7 L6,7 C6,4.790861 7.790861,3 10,3 C12.209139,3 14,4.790861 14,7 Z M10,20 C15.5228475,20 20,15.5228475 20,10 C20,4.4771525 15.5228475,0 10,0 C4.4771525,0 0,4.4771525 0,10 C0,15.5228475 4.4771525,20 10,20 Z M9,15 L11,15 L11,17 L9,17 L9,15 Z" id="Combined-Shape"></path>
|
5 |
+
</g>
|
6 |
+
</g>
|
7 |
+
</svg>
|
vendor/league/flysystem/docs/index.css
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import url('https://fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans:400,400i,600');
|
2 |
+
@import "tailwindcss/preflight";
|
3 |
+
@import "github.css";
|
4 |
+
@import "algolia.css";
|
5 |
+
@import "tailwindcss/components";
|
6 |
+
@import "tailwindcss/utilities";
|
7 |
+
|
8 |
+
hr {
|
9 |
+
@apply border-b border-t border-indigo-lighter mt-10 mb-8 opacity-75 w-1/2 mx-auto;
|
10 |
+
border-bottom-color: #fff;
|
11 |
+
}
|
12 |
+
|
13 |
+
a {
|
14 |
+
text-decoration: none;
|
15 |
+
@apply text-indigo-dark;
|
16 |
+
}
|
17 |
+
|
18 |
+
html {
|
19 |
+
@apply font-body font-normal;
|
20 |
+
-webkit-font-smoothing: antialiased;
|
21 |
+
}
|
22 |
+
|
23 |
+
:focus {
|
24 |
+
outline: none;
|
25 |
+
}
|
26 |
+
|
27 |
+
h1, h2, h3, h4, h5 {
|
28 |
+
@apply font-heading leading-tight text-indigo-darkest;
|
29 |
+
}
|
30 |
+
|
31 |
+
.focus\:placeholder-none:focus::placeholder {
|
32 |
+
opacity: 0;
|
33 |
+
}
|
34 |
+
|
35 |
+
p, ul {
|
36 |
+
@apply mb-4;
|
37 |
+
}
|
38 |
+
|
39 |
+
article table {
|
40 |
+
@apply text-left p-4 bg-white mb-4 shadow-md -mx-4;
|
41 |
+
border-spacing: 0;
|
42 |
+
border-collapse: collapse;
|
43 |
+
}
|
44 |
+
|
45 |
+
article table {
|
46 |
+
@apply mb-6 p-0;
|
47 |
+
width: calc(100% + 2rem);
|
48 |
+
/*white-space: nowrap;*/
|
49 |
+
overflow: auto;
|
50 |
+
}
|
51 |
+
|
52 |
+
@screen md {
|
53 |
+
article table {
|
54 |
+
display: table;
|
55 |
+
width: 100%;
|
56 |
+
@apply -mx-0;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
div.highlighter-rouge + table {
|
61 |
+
@apply -mt-4 border-t-4 border-indigo-dark;
|
62 |
+
}
|
63 |
+
|
64 |
+
article table td {
|
65 |
+
vertical-align: top;
|
66 |
+
@apply border-t border-indigo-lighter;
|
67 |
+
}
|
68 |
+
|
69 |
+
article table th, article table td {
|
70 |
+
@apply px-4 py-2;
|
71 |
+
}
|
72 |
+
|
73 |
+
article table th {
|
74 |
+
@apply bg-indigo text-white font-bold;
|
75 |
+
}
|
76 |
+
|
77 |
+
div.highlighter-rouge + table th {
|
78 |
+
@apply text-indigo bg-white;
|
79 |
+
}
|
80 |
+
|
81 |
+
.menu-closed\:shown {
|
82 |
+
@apply hidden;
|
83 |
+
}
|
84 |
+
|
85 |
+
.menu-closed .menu-closed\:shown {
|
86 |
+
@apply inline;
|
87 |
+
}
|
88 |
+
|
89 |
+
.menu-closed .menu-closed\:hidden {
|
90 |
+
@apply hidden;
|
91 |
+
}
|
92 |
+
|
93 |
+
#carbonads {
|
94 |
+
position: relative;
|
95 |
+
text-shadow: 1px 1px 0px rgba(255, 255, 255, .5);
|
96 |
+
background: white;
|
97 |
+
max-width: 340px;
|
98 |
+
@apply text-base leading-normal text-xs-sm text-grey-darkest p-2 mb-4 bg-grey-light rounded shadow-inner inline-block;
|
99 |
+
}
|
100 |
+
|
101 |
+
#carbonads > span {
|
102 |
+
display: block;
|
103 |
+
}
|
104 |
+
|
105 |
+
.carbon-text {
|
106 |
+
@apply pl-2 pb-4 leading-normal text-white;
|
107 |
+
}
|
108 |
+
|
109 |
+
#carbonads a {
|
110 |
+
color: inherit;
|
111 |
+
}
|
112 |
+
|
113 |
+
.carbon-wrap {
|
114 |
+
display: flex;
|
115 |
+
align-items: start;
|
116 |
+
}
|
117 |
+
|
118 |
+
.carbon-img {
|
119 |
+
flex-grow: 0;
|
120 |
+
flex-shrink: 0;
|
121 |
+
}
|
122 |
+
|
123 |
+
.carbon-img img {
|
124 |
+
display: block;
|
125 |
+
}
|
126 |
+
|
127 |
+
.carbon-poweredby {
|
128 |
+
position: absolute;
|
129 |
+
left: calc(130px + 1rem);
|
130 |
+
bottom: 0;
|
131 |
+
@apply opacity-75 pb-2;
|
132 |
+
}
|
vendor/league/flysystem/docs/index.js
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import './index.css';
|
2 |
+
|
3 |
+
let copyElementText = (element) => {
|
4 |
+
let selection = window.getSelection();
|
5 |
+
let range = document.createRange();
|
6 |
+
document.execCommand('copy');
|
7 |
+
range.selectNodeContents(element);
|
8 |
+
selection.removeAllRanges();
|
9 |
+
selection.addRange(range);
|
10 |
+
window.getSelection().removeAllRanges();
|
11 |
+
};
|
12 |
+
|
13 |
+
document
|
14 |
+
.querySelectorAll('.highlighter-copy')
|
15 |
+
.forEach(btn => btn.addEventListener('click', () => copyElementText(btn.previousSibling)));
|
16 |
+
|
17 |
+
let firstSubHeading = document.querySelector('#article h2:first-of-type');
|
18 |
+
|
19 |
+
if (firstSubHeading) {
|
20 |
+
let carbon = document.createElement('script');
|
21 |
+
carbon.setAttribute('async', true);
|
22 |
+
carbon.setAttribute('type', 'text/javascript');
|
23 |
+
carbon.setAttribute('src', '//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=flysystemthephpleaguecom');
|
24 |
+
carbon.setAttribute('id', '_carbonads_js');
|
25 |
+
firstSubHeading.before(carbon);
|
26 |
+
}
|
27 |
+
|
28 |
+
let menuBtn = document.getElementById('menu-toggle');
|
29 |
+
let navigation = document.getElementById('navigation');
|
30 |
+
let article = document.getElementById('article');
|
31 |
+
|
32 |
+
let toggleClassName = function (el, className) {
|
33 |
+
if (el.classList.contains(className)) {
|
34 |
+
el.classList.remove(className);
|
35 |
+
} else {
|
36 |
+
el.classList.add(className);
|
37 |
+
}
|
38 |
+
};
|
39 |
+
menuBtn.addEventListener('click', function (e) {
|
40 |
+
e.preventDefault();
|
41 |
+
toggleClassName(menuBtn, 'menu-closed');
|
42 |
+
toggleClassName(navigation, 'hidden');
|
43 |
+
toggleClassName(article, 'hidden');
|
44 |
+
});
|
vendor/league/flysystem/docs/index.md
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Filesystem abstraction for PHP
|
4 |
+
permalink: /docs/
|
5 |
+
redirect_from: /
|
6 |
+
---
|
7 |
+
|
8 |
+
[![Author](//img.shields.io/badge/author-@frankdejonge-blue.svg?style=flat-square)](//twitter.com/frankdejonge)
|
9 |
+
[![Source Code](//img.shields.io/badge/source-thephpleague/flysystem-blue.svg?style=flat-square)](//github.com/thephpleague/flysystem)
|
10 |
+
[![Latest Version](//img.shields.io/github/tag/thephpleague/flysystem.svg?style=flat-square)](//github.com/thephpleague/flysystem/releases)
|
11 |
+
[![Software License](//img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](//github.com/thephpleague/flysystem/blob/master/LICENSE)
|
12 |
+
[![Build Status](//img.shields.io/travis/thephpleague/flysystem/master.svg?style=flat-square)](//travis-ci.org/thephpleague/flysystem)
|
13 |
+
[![Coverage Status](//img.shields.io/scrutinizer/coverage/g/thephpleague/flysystem.svg?style=flat-square)](//scrutinizer-ci.com/g/thephpleague/flysystem/code-structure)
|
14 |
+
[![Quality Score](//img.shields.io/scrutinizer/g/thephpleague/flysystem.svg?style=flat-square)](//scrutinizer-ci.com/g/thephpleague/flysystem)
|
15 |
+
[![Total Downloads](//img.shields.io/packagist/dt/league/flysystem.svg?style=flat-square)](//packagist.org/packages/league/flysystem)
|
16 |
+
![php 5.5.9+](//img.shields.io/badge/php-min%205.5.9-red.svg?style=flat-square)
|
17 |
+
|
18 |
+
## About Flysystem
|
19 |
+
|
20 |
+
Flysystem is a filesystem abstraction library for PHP. By providing a unified interface
|
21 |
+
for many different filesystems you're able to swap out filesystems without application wide
|
22 |
+
rewrites.
|
23 |
+
|
24 |
+
Using Flysystem can eliminate vendor-lock in, reduce technical debt, and improve the testability
|
25 |
+
of your code.
|
26 |
+
|
27 |
+
## Gold Sponsor(s)
|
28 |
+
|
29 |
+
<div class="flex my-6 max-w-sm">
|
30 |
+
<a target="_blank" href="https://laravel.com" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
31 |
+
<img src="/img/laravel.svg" class="w-full" alt="Laravel.com"/>
|
32 |
+
</a>
|
33 |
+
<a target="_blank" href="https://azure.microsoft.com/free/?utm_source=flysystem&utm_medium=banner&utm_campaign=flysystem_sponsorship" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
34 |
+
<img src="/img/azure.svg" class="max-w-full m-6" alt="Microsoft Azure"/>
|
35 |
+
</a>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
View all the <a href="/docs/sponsors/">sponsors</a>.
|
39 |
+
|
40 |
+
## Getting Started
|
41 |
+
|
42 |
+
* **[Architecture](/docs/architecture/)**: Flysystem's internal architecture
|
43 |
+
* **[Setup/Bootstrap](/docs/usage/setup/)**: Load Flysystem and set up your first adapter
|
44 |
+
* **[Flysystem API](/docs/usage/filesystem-api/)**: How to interact with your Flysystem instance
|
45 |
+
|
46 |
+
### Commonly-Used Adapters
|
47 |
+
|
48 |
+
* **[AWS S3](/docs/adapter/aws-s3/)**
|
49 |
+
* **[Azure](/docs/adapter/azure/)**
|
50 |
+
* **[Digital Ocean Spaces](/docs/adapter/digitalocean-spaces/)**
|
51 |
+
* **[Local](/docs/adapter/local/)**
|
52 |
+
* **[Memory](/docs/adapter/memory/)**
|
53 |
+
* **[Creating An Adapter](/docs/advanced/creating-an-adapter/)**
|
vendor/league/flysystem/docs/package.json
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "flysystem-redesign",
|
3 |
+
"private": true,
|
4 |
+
"scripts": {
|
5 |
+
"watch": "NODE_ENV=development node_modules/webpack/bin/webpack.js --mode=development --watch --progress --config=webpack.config.js",
|
6 |
+
"prod": "NODE_ENV=production node_modules/webpack/bin/webpack.js -p --no-progress --hide-modules --config=webpack.config.js"
|
7 |
+
},
|
8 |
+
"dependencies": {
|
9 |
+
"css-loader": "^0.28.11",
|
10 |
+
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
11 |
+
"glob-all": "^3.1.0",
|
12 |
+
"optimize-css-assets-webpack-plugin": "^4.0.0",
|
13 |
+
"postcss": "^6.0.21",
|
14 |
+
"postcss-csso": "^3.0.0",
|
15 |
+
"postcss-import": "^11.1.0",
|
16 |
+
"postcss-loader": "^2.1.3",
|
17 |
+
"purgecss-webpack-plugin": "^0.22.0",
|
18 |
+
"style-loader": "^0.20.3",
|
19 |
+
"tailwindcss": "^0.5.2",
|
20 |
+
"webpack": "^4.5.0"
|
21 |
+
},
|
22 |
+
"devDependencies": {
|
23 |
+
"webpack-cli": "^2.0.14"
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/docs/postcss.config.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = {
|
2 |
+
plugins: [
|
3 |
+
require('postcss-import'),
|
4 |
+
require('tailwindcss')('./tailwind.js'),
|
5 |
+
require('postcss-csso')
|
6 |
+
]
|
7 |
+
};
|
vendor/league/flysystem/docs/sponsors.md
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Development Sponsorship
|
4 |
+
permalink: /docs/sponsors/
|
5 |
+
redirect_from: /sponsors/
|
6 |
+
---
|
7 |
+
|
8 |
+
In order to free up time to keep everything up-to-date financial help is greatly appreciated.
|
9 |
+
|
10 |
+
<a href="https://www.patreon.com/bePatron?u=8623643"><img src="/img/become_a_patron_button.png" alt="Become a Patron!" title="Become a Patron!"/></a>
|
11 |
+
|
12 |
+
# Gold Sponsors
|
13 |
+
|
14 |
+
<div class="flex my-6">
|
15 |
+
<a target="_blank" href="https://laravel.com" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
16 |
+
<img src="/img/laravel.svg" class="w-full" alt="Laravel.com"/>
|
17 |
+
<span style="background-color: #FB503B" class="text-center text-xl hidden sm:block py-4 bg-indigo-dark text-white bg-grey-lightest">Laravel.com</span>
|
18 |
+
</a>
|
19 |
+
<a target="_blank" href="https://azure.microsoft.com/free/?utm_source=flysystem&utm_medium=banner&utm_campaign=flysystem_sponsorship" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
20 |
+
<img src="/img/azure.svg" class="max-w-full m-6 sm:m-8" alt="Azure.com"/>
|
21 |
+
<span style="background-color: #00a1f1;" class="text-center text-xl hidden sm:block py-4 bg-indigo-dark text-white bg-grey-lightest">Azure.com</span>
|
22 |
+
</a>
|
23 |
+
<a target="_blank" href="https://patreon.com/frankdejonge" class="flex-no-grow w-1/3 bg-white rounded shadow-md mr-4 overflow-hidden">
|
24 |
+
<img src="/img/question.svg" class="max-w-full m-6 sm:m-8 opacity-50" alt="Become a sponsor"/>
|
25 |
+
<span class="text-center text-xl hidden sm:block py-4 bg-indigo-light text-white bg-grey-lightest">Your company?</span>
|
26 |
+
</a>
|
27 |
+
</div>
|
28 |
+
|
29 |
+
## Silver Sponsors
|
30 |
+
|
31 |
+
<div class="flex my-6">
|
32 |
+
<a target="_blank" href="https://patreon.com/frankdejonge" class="flex-no-grow w-1/4 bg-white rounded shadow-md mr-4 overflow-hidden">
|
33 |
+
<img src="/img/question.svg" class="max-w-full m-6 opacity-50" alt="Become a sponsor"/>
|
34 |
+
<span class="text-center text-md hidden sm:block py-3 bg-indigo-light text-white bg-grey-lightest">Your company?</span>
|
35 |
+
</a>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
## Bronze Sponsors
|
39 |
+
|
40 |
+
<ul class="pt-4 text-lg">
|
41 |
+
<li><a target="_blank" href="http://isset.nl/">Isset Internet Professionals</a></li>
|
42 |
+
<li><a target="_blank" href="https://jwe.nl/">Jan-Willem Eshuis</a></li>
|
43 |
+
</ul>
|
44 |
+
|
45 |
+
### Become a Sponsor
|
46 |
+
|
47 |
+
If you and your company believe that open source software is valuable and requires
|
48 |
+
financial sustainability, consider supporting:
|
49 |
+
|
50 |
+
<a href="https://www.patreon.com/bePatron?u=8623643"><img src="/img/become_a_patron_button.png" alt="Become a Patron!" title="Become a Patron!"/></a>
|
vendor/league/flysystem/docs/stubs/algolia.md
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Filesystem abstraction for PHP
|
4 |
+
permalink: /stubs/algolia/
|
5 |
+
sitemap: false
|
6 |
+
---
|
7 |
+
|
8 |
+
This file contains a html/css skeleton to prevent css overrides to
|
9 |
+
be purged by webpack.
|
10 |
+
|
11 |
+
<div class="algolia-autocomplete algolia-autocomplete-right algolia-autocomplete-left">
|
12 |
+
<div class="ds-dropdown-menu"></div>
|
13 |
+
<div class="algolia-docsearch-suggestion--content"></div>
|
14 |
+
<div class="algolia-docsearch-suggestion--subcategory-column"></div>
|
15 |
+
</div>
|
vendor/league/flysystem/docs/stubs/carbonads.md
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Filesystem abstraction for PHP
|
4 |
+
permalink: /stubs/carbon/
|
5 |
+
sitemap: false
|
6 |
+
---
|
7 |
+
|
8 |
+
<div id="carbonads">
|
9 |
+
<span>
|
10 |
+
<span class="carbon-wrap">
|
11 |
+
<a href="[link]" class="carbon-img" target="_blank">
|
12 |
+
<img src="[image]" alt="" border="0" height="100" width="130" style="max-width:130px;">
|
13 |
+
</a>
|
14 |
+
<a href="[link]" class="carbon-text" target="_blank">[text]</a>
|
15 |
+
</span>
|
16 |
+
<a href="http://carbonads.net/" class="carbon-poweredby" target="_blank">ads via Carbon</a>
|
17 |
+
</span>
|
18 |
+
</div>
|
vendor/league/flysystem/docs/tailwind.js
ADDED
@@ -0,0 +1,802 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
|
3 |
+
Tailwind - The Utility-First CSS Framework
|
4 |
+
|
5 |
+
A project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink),
|
6 |
+
David Hemphill (@davidhemphill) and Steve Schoger (@steveschoger).
|
7 |
+
|
8 |
+
Welcome to the Tailwind config file. This is where you can customize
|
9 |
+
Tailwind specifically for your project. Don't be intimidated by the
|
10 |
+
length of this file. It's really just a big JavaScript object and
|
11 |
+
we've done our very best to explain each section.
|
12 |
+
|
13 |
+
View the full documentation at https://tailwindcss.com.
|
14 |
+
|
15 |
+
|
16 |
+
|-------------------------------------------------------------------------------
|
17 |
+
| The default config
|
18 |
+
|-------------------------------------------------------------------------------
|
19 |
+
|
|
20 |
+
| This variable contains the default Tailwind config. You don't have
|
21 |
+
| to use it, but it can sometimes be helpful to have available. For
|
22 |
+
| example, you may choose to merge your custom configuration
|
23 |
+
| values with some of the Tailwind defaults.
|
24 |
+
|
|
25 |
+
*/
|
26 |
+
|
27 |
+
// let defaultConfig = require('tailwindcss/defaultConfig')()
|
28 |
+
|
29 |
+
|
30 |
+
/*
|
31 |
+
|-------------------------------------------------------------------------------
|
32 |
+
| Colors https://tailwindcss.com/docs/colors
|
33 |
+
|-------------------------------------------------------------------------------
|
34 |
+
|
|
35 |
+
| Here you can specify the colors used in your project. To get you started,
|
36 |
+
| we've provided a generous palette of great looking colors that are perfect
|
37 |
+
| for prototyping, but don't hesitate to change them for your project. You
|
38 |
+
| own these colors, nothing will break if you change everything about them.
|
39 |
+
|
|
40 |
+
| We've used literal color names ("red", "blue", etc.) for the default
|
41 |
+
| palette, but if you'd rather use functional names like "primary" and
|
42 |
+
| "secondary", or even a numeric scale like "100" and "200", go for it.
|
43 |
+
|
|
44 |
+
*/
|
45 |
+
|
46 |
+
let colors = {
|
47 |
+
'transparent': 'transparent',
|
48 |
+
|
49 |
+
'black': '#22292f',
|
50 |
+
'grey-darkest': '#3d4852',
|
51 |
+
'grey-darker': '#606f7b',
|
52 |
+
'grey-dark': '#8795a1',
|
53 |
+
'grey': '#b8c2cc',
|
54 |
+
'grey-light': '#dae1e7',
|
55 |
+
'grey-lighter': '#f1f5f8',
|
56 |
+
'grey-lightest': '#f8fafc',
|
57 |
+
'white': '#ffffff',
|
58 |
+
|
59 |
+
'red-darkest': '#3b0d0c',
|
60 |
+
'red-darker': '#621b18',
|
61 |
+
'red-dark': '#cc1f1a',
|
62 |
+
'red': '#e3342f',
|
63 |
+
'red-light': '#ef5753',
|
64 |
+
'red-lighter': '#f9acaa',
|
65 |
+
'red-lightest': '#fcebea',
|
66 |
+
|
67 |
+
'orange-darkest': '#462a16',
|
68 |
+
'orange-darker': '#613b1f',
|
69 |
+
'orange-dark': '#de751f',
|
70 |
+
'orange': '#f6993f',
|
71 |
+
'orange-light': '#faad63',
|
72 |
+
'orange-lighter': '#fcd9b6',
|
73 |
+
'orange-lightest': '#fff5eb',
|
74 |
+
|
75 |
+
'yellow-darkest': '#453411',
|
76 |
+
'yellow-darker': '#684f1d',
|
77 |
+
'yellow-dark': '#f2d024',
|
78 |
+
'yellow': '#ffed4a',
|
79 |
+
'yellow-light': '#fff382',
|
80 |
+
'yellow-lighter': '#fff9c2',
|
81 |
+
'yellow-lightest': '#fcfbeb',
|
82 |
+
|
83 |
+
'green-darkest': '#0f2f21',
|
84 |
+
'green-darker': '#1a4731',
|
85 |
+
'green-dark': '#1f9d55',
|
86 |
+
'green': '#38c172',
|
87 |
+
'green-light': '#51d88a',
|
88 |
+
'green-lighter': '#a2f5bf',
|
89 |
+
'green-lightest': '#e3fcec',
|
90 |
+
|
91 |
+
'teal-darkest': '#0d3331',
|
92 |
+
'teal-darker': '#20504f',
|
93 |
+
'teal-dark': '#38a89d',
|
94 |
+
'teal': '#4dc0b5',
|
95 |
+
'teal-light': '#64d5ca',
|
96 |
+
'teal-lighter': '#a0f0ed',
|
97 |
+
'teal-lightest': '#e8fffe',
|
98 |
+
|
99 |
+
'blue-darkest': '#182341',
|
100 |
+
'blue-darker': '#1D2F64',
|
101 |
+
'blue-dark': '#354B8E',
|
102 |
+
'blue': '#677AB2',
|
103 |
+
'blue-light': '#D9DFF1',
|
104 |
+
'blue-lighter': '#F0F3FC',
|
105 |
+
'blue-lightest': '#F7F9FE',
|
106 |
+
|
107 |
+
// 'indigo-darkest': '#182341',
|
108 |
+
'indigo-darkest': '#253461',
|
109 |
+
'indigo-body-text': '#535E7E',
|
110 |
+
'indigo-grey-darkest': '#253461',
|
111 |
+
'indigo-darker': '#2A3F7D',
|
112 |
+
'indigo-dark': '#4764BD',
|
113 |
+
'indigo': '#637FD6',
|
114 |
+
'indigo-light': '#ACBDF1',
|
115 |
+
'indigo-lighter': '#D9DFF1',
|
116 |
+
'indigo-lightest': '#F7F9FE',
|
117 |
+
|
118 |
+
'purple-darkest': '#21183c',
|
119 |
+
'purple-darker': '#382b5f',
|
120 |
+
'purple-dark': '#794acf',
|
121 |
+
'purple': '#9561e2',
|
122 |
+
'purple-light': '#a779e9',
|
123 |
+
'purple-lighter': '#d6bbfc',
|
124 |
+
'purple-lightest': '#f3ebff',
|
125 |
+
|
126 |
+
'pink-darkest': '#451225',
|
127 |
+
'pink-darker': '#6f213f',
|
128 |
+
'pink-dark': '#eb5286',
|
129 |
+
'pink': '#f66d9b',
|
130 |
+
'pink-light': '#fa7ea8',
|
131 |
+
'pink-lighter': '#ffbbca',
|
132 |
+
'pink-lightest': '#ffebef',
|
133 |
+
}
|
134 |
+
|
135 |
+
module.exports = {
|
136 |
+
|
137 |
+
/*
|
138 |
+
|-----------------------------------------------------------------------------
|
139 |
+
| Colors https://tailwindcss.com/docs/colors
|
140 |
+
|-----------------------------------------------------------------------------
|
141 |
+
|
|
142 |
+
| The color palette defined above is also assigned to the "colors" key of
|
143 |
+
| your Tailwind config. This makes it easy to access them in your CSS
|
144 |
+
| using Tailwind's config helper. For example:
|
145 |
+
|
|
146 |
+
| .error { color: config('colors.red') }
|
147 |
+
|
|
148 |
+
*/
|
149 |
+
|
150 |
+
colors: colors,
|
151 |
+
|
152 |
+
|
153 |
+
/*
|
154 |
+
|-----------------------------------------------------------------------------
|
155 |
+
| Screens https://tailwindcss.com/docs/responsive-design
|
156 |
+
|-----------------------------------------------------------------------------
|
157 |
+
|
|
158 |
+
| Screens in Tailwind are translated to CSS media queries. They define the
|
159 |
+
| responsive breakpoints for your project. By default Tailwind takes a
|
160 |
+
| "mobile first" approach, where each screen size represents a minimum
|
161 |
+
| viewport width. Feel free to have as few or as many screens as you
|
162 |
+
| want, naming them in whatever way you'd prefer for your project.
|
163 |
+
|
|
164 |
+
| Tailwind also allows for more complex screen definitions, which can be
|
165 |
+
| useful in certain situations. Be sure to see the full responsive
|
166 |
+
| documentation for a complete list of options.
|
167 |
+
|
|
168 |
+
| Class name: .{screen}:{utility}
|
169 |
+
|
|
170 |
+
*/
|
171 |
+
|
172 |
+
screens: {
|
173 |
+
'-sm': {'max': '576px'},
|
174 |
+
'sm': '576px',
|
175 |
+
'-md': {'max': '768px'},
|
176 |
+
'sm-md': {'min': '576px', 'max': '768px'},
|
177 |
+
'md': '768px',
|
178 |
+
'md-lg': {'min': '768px', 'max': '992px'},
|
179 |
+
'-lg': {'max': '992px'},
|
180 |
+
'lg': '992px',
|
181 |
+
'lg-xl': {'min': '992px', 'max': '1200px'},
|
182 |
+
'xl': '1200px',
|
183 |
+
},
|
184 |
+
|
185 |
+
|
186 |
+
/*
|
187 |
+
|-----------------------------------------------------------------------------
|
188 |
+
| Fonts https://tailwindcss.com/docs/fonts
|
189 |
+
|-----------------------------------------------------------------------------
|
190 |
+
|
|
191 |
+
| Here is where you define your project's font stack, or font families.
|
192 |
+
| Keep in mind that Tailwind doesn't actually load any fonts for you.
|
193 |
+
| If you're using custom fonts you'll need to import them prior to
|
194 |
+
| defining them here.
|
195 |
+
|
|
196 |
+
| By default we provide a native font stack that works remarkably well on
|
197 |
+
| any device or OS you're using, since it just uses the default fonts
|
198 |
+
| provided by the platform.
|
199 |
+
|
|
200 |
+
| Class name: .font-{name}
|
201 |
+
|
|
202 |
+
*/
|
203 |
+
|
204 |
+
fonts: {
|
205 |
+
'heading': ['Lato', 'sans-serif'],
|
206 |
+
'body': ['Open Sans', 'sans-serif']
|
207 |
+
},
|
208 |
+
|
209 |
+
|
210 |
+
/*
|
211 |
+
|-----------------------------------------------------------------------------
|
212 |
+
| Text sizes https://tailwindcss.com/docs/text-sizing
|
213 |
+
|-----------------------------------------------------------------------------
|
214 |
+
|
|
215 |
+
| Here is where you define your text sizes. Name these in whatever way
|
216 |
+
| makes the most sense to you. We use size names by default, but
|
217 |
+
| you're welcome to use a numeric scale or even something else
|
218 |
+
| entirely.
|
219 |
+
|
|
220 |
+
| By default Tailwind uses the "rem" unit type for most measurements.
|
221 |
+
| This allows you to set a root font size which all other sizes are
|
222 |
+
| then based on. That said, you are free to use whatever units you
|
223 |
+
| prefer, be it rems, ems, pixels or other.
|
224 |
+
|
|
225 |
+
| Class name: .text-{size}
|
226 |
+
|
|
227 |
+
*/
|
228 |
+
|
229 |
+
textSizes: {
|
230 |
+
'xs': '.75rem', // 12px
|
231 |
+
'xs-sm': '.8rem', // 12px
|
232 |
+
'sm': '.875rem', // 14px
|
233 |
+
'base': '1rem', // 16px
|
234 |
+
'lg': '1.125rem', // 18px
|
235 |
+
'xl': '1.25rem', // 20px
|
236 |
+
'2xl': '1.5rem', // 24px
|
237 |
+
'3xl': '1.875rem', // 30px
|
238 |
+
'4xl': '2.25rem', // 36px
|
239 |
+
'5xl': '3rem', // 48px
|
240 |
+
},
|
241 |
+
|
242 |
+
|
243 |
+
/*
|
244 |
+
|-----------------------------------------------------------------------------
|
245 |
+
| Font weights https://tailwindcss.com/docs/font-weight
|
246 |
+
|-----------------------------------------------------------------------------
|
247 |
+
|
|
248 |
+
| Here is where you define your font weights. We've provided a list of
|
249 |
+
| common font weight names with their respective numeric scale values
|
250 |
+
| to get you started. It's unlikely that your project will require
|
251 |
+
| all of these, so we recommend removing those you don't need.
|
252 |
+
|
|
253 |
+
| Class name: .font-{weight}
|
254 |
+
|
|
255 |
+
*/
|
256 |
+
|
257 |
+
fontWeights: {
|
258 |
+
'hairline': 100,
|
259 |
+
'thin': 200,
|
260 |
+
'light': 300,
|
261 |
+
'normal': 400,
|
262 |
+
'medium': 500,
|
263 |
+
'semibold': 600,
|
264 |
+
'bold': 700,
|
265 |
+
'extrabold': 800,
|
266 |
+
'black': 900,
|
267 |
+
},
|
268 |
+
|
269 |
+
|
270 |
+
/*
|
271 |
+
|-----------------------------------------------------------------------------
|
272 |
+
| Leading (line height) https://tailwindcss.com/docs/line-height
|
273 |
+
|-----------------------------------------------------------------------------
|
274 |
+
|
|
275 |
+
| Here is where you define your line height values, or as we call
|
276 |
+
| them in Tailwind, leadings.
|
277 |
+
|
|
278 |
+
| Class name: .leading-{size}
|
279 |
+
|
|
280 |
+
*/
|
281 |
+
|
282 |
+
leading: {
|
283 |
+
'none': 1,
|
284 |
+
'tight': 1.25,
|
285 |
+
'normal': 1.75,
|
286 |
+
'loose': 2,
|
287 |
+
},
|
288 |
+
|
289 |
+
|
290 |
+
/*
|
291 |
+
|-----------------------------------------------------------------------------
|
292 |
+
| Tracking (letter spacing) https://tailwindcss.com/docs/letter-spacing
|
293 |
+
|-----------------------------------------------------------------------------
|
294 |
+
|
|
295 |
+
| Here is where you define your letter spacing values, or as we call
|
296 |
+
| them in Tailwind, tracking.
|
297 |
+
|
|
298 |
+
| Class name: .tracking-{size}
|
299 |
+
|
|
300 |
+
*/
|
301 |
+
|
302 |
+
tracking: {
|
303 |
+
'tight': '-0.05em',
|
304 |
+
'normal': '0',
|
305 |
+
'wide': '0.05em',
|
306 |
+
},
|
307 |
+
|
308 |
+
|
309 |
+
/*
|
310 |
+
|-----------------------------------------------------------------------------
|
311 |
+
| Text colors https://tailwindcss.com/docs/text-color
|
312 |
+
|-----------------------------------------------------------------------------
|
313 |
+
|
|
314 |
+
| Here is where you define your text colors. By default these use the
|
315 |
+
| color palette we defined above, however you're welcome to set these
|
316 |
+
| independently if that makes sense for your project.
|
317 |
+
|
|
318 |
+
| Class name: .text-{color}
|
319 |
+
|
|
320 |
+
*/
|
321 |
+
|
322 |
+
textColors: colors,
|
323 |
+
|
324 |
+
|
325 |
+
/*
|
326 |
+
|-----------------------------------------------------------------------------
|
327 |
+
| Background colors https://tailwindcss.com/docs/background-color
|
328 |
+
|-----------------------------------------------------------------------------
|
329 |
+
|
|
330 |
+
| Here is where you define your background colors. By default these use
|
331 |
+
| the color palette we defined above, however you're welcome to set
|
332 |
+
| these independently if that makes sense for your project.
|
333 |
+
|
|
334 |
+
| Class name: .bg-{color}
|
335 |
+
|
|
336 |
+
*/
|
337 |
+
|
338 |
+
backgroundColors: colors,
|
339 |
+
|
340 |
+
|
341 |
+
/*
|
342 |
+
|-----------------------------------------------------------------------------
|
343 |
+
| Background sizes https://tailwindcss.com/docs/background-size
|
344 |
+
|-----------------------------------------------------------------------------
|
345 |
+
|
|
346 |
+
| Here is where you define your background sizes. We provide some common
|
347 |
+
| values that are useful in most projects, but feel free to add other sizes
|
348 |
+
| that are specific to your project here as well.
|
349 |
+
|
|
350 |
+
| Class name: .bg-{size}
|
351 |
+
|
|
352 |
+
*/
|
353 |
+
|
354 |
+
backgroundSize: {
|
355 |
+
'auto': 'auto',
|
356 |
+
'cover': 'cover',
|
357 |
+
'contain': 'contain',
|
358 |
+
},
|
359 |
+
|
360 |
+
|
361 |
+
/*
|
362 |
+
|-----------------------------------------------------------------------------
|
363 |
+
| Border widths https://tailwindcss.com/docs/border-width
|
364 |
+
|-----------------------------------------------------------------------------
|
365 |
+
|
|
366 |
+
| Here is where you define your border widths. Take note that border
|
367 |
+
| widths require a special "default" value set as well. This is the
|
368 |
+
| width that will be used when you do not specify a border width.
|
369 |
+
|
|
370 |
+
| Class name: .border{-side?}{-width?}
|
371 |
+
|
|
372 |
+
*/
|
373 |
+
|
374 |
+
borderWidths: {
|
375 |
+
default: '1px',
|
376 |
+
'0': '0',
|
377 |
+
'2': '2px',
|
378 |
+
'4': '4px',
|
379 |
+
'8': '8px',
|
380 |
+
},
|
381 |
+
|
382 |
+
|
383 |
+
/*
|
384 |
+
|-----------------------------------------------------------------------------
|
385 |
+
| Border colors https://tailwindcss.com/docs/border-color
|
386 |
+
|-----------------------------------------------------------------------------
|
387 |
+
|
|
388 |
+
| Here is where you define your border colors. By default these use the
|
389 |
+
| color palette we defined above, however you're welcome to set these
|
390 |
+
| independently if that makes sense for your project.
|
391 |
+
|
|
392 |
+
| Take note that border colors require a special "default" value set
|
393 |
+
| as well. This is the color that will be used when you do not
|
394 |
+
| specify a border color.
|
395 |
+
|
|
396 |
+
| Class name: .border-{color}
|
397 |
+
|
|
398 |
+
*/
|
399 |
+
|
400 |
+
borderColors: global.Object.assign({ default: colors['grey-light'] }, colors),
|
401 |
+
|
402 |
+
|
403 |
+
/*
|
404 |
+
|-----------------------------------------------------------------------------
|
405 |
+
| Border radius https://tailwindcss.com/docs/border-radius
|
406 |
+
|-----------------------------------------------------------------------------
|
407 |
+
|
|
408 |
+
| Here is where you define your border radius values. If a `default` radius
|
409 |
+
| is provided, it will be made available as the non-suffixed `.rounded`
|
410 |
+
| utility.
|
411 |
+
|
|
412 |
+
| If your scale includes a `0` value to reset already rounded corners, it's
|
413 |
+
| a good idea to put it first so other values are able to override it.
|
414 |
+
|
|
415 |
+
| Class name: .rounded{-side?}{-size?}
|
416 |
+
|
|
417 |
+
*/
|
418 |
+
|
419 |
+
borderRadius: {
|
420 |
+
'none': '0',
|
421 |
+
'sm': '.125rem',
|
422 |
+
default: '.25rem',
|
423 |
+
'lg': '.5rem',
|
424 |
+
'full': '9999px',
|
425 |
+
},
|
426 |
+
|
427 |
+
|
428 |
+
/*
|
429 |
+
|-----------------------------------------------------------------------------
|
430 |
+
| Width https://tailwindcss.com/docs/width
|
431 |
+
|-----------------------------------------------------------------------------
|
432 |
+
|
|
433 |
+
| Here is where you define your width utility sizes. These can be
|
434 |
+
| percentage based, pixels, rems, or any other units. By default
|
435 |
+
| we provide a sensible rem based numeric scale, a percentage
|
436 |
+
| based fraction scale, plus some other common use-cases. You
|
437 |
+
| can, of course, modify these values as needed.
|
438 |
+
|
|
439 |
+
|
|
440 |
+
| It's also worth mentioning that Tailwind automatically escapes
|
441 |
+
| invalid CSS class name characters, which allows you to have
|
442 |
+
| awesome classes like .w-2/3.
|
443 |
+
|
|
444 |
+
| Class name: .w-{size}
|
445 |
+
|
|
446 |
+
*/
|
447 |
+
|
448 |
+
width: {
|
449 |
+
'auto': 'auto',
|
450 |
+
'px': '1px',
|
451 |
+
'1': '0.25rem',
|
452 |
+
'2': '0.5rem',
|
453 |
+
'3': '0.75rem',
|
454 |
+
'4': '1rem',
|
455 |
+
'5': '1.25rem',
|
456 |
+
'6': '1.5rem',
|
457 |
+
'8': '2rem',
|
458 |
+
'10': '2.5rem',
|
459 |
+
'12': '3rem',
|
460 |
+
'16': '4rem',
|
461 |
+
'24': '6rem',
|
462 |
+
'32': '8rem',
|
463 |
+
'48': '12rem',
|
464 |
+
'64': '16rem',
|
465 |
+
'1/2': '50%',
|
466 |
+
'1/3': '33.33333%',
|
467 |
+
'2/3': '66.66667%',
|
468 |
+
'1/4': '25%',
|
469 |
+
'3/4': '75%',
|
470 |
+
'1/5': '20%',
|
471 |
+
'2/5': '40%',
|
472 |
+
'3/5': '60%',
|
473 |
+
'4/5': '80%',
|
474 |
+
'1/6': '16.66667%',
|
475 |
+
'5/6': '83.33333%',
|
476 |
+
'1/14': 'calc(100% / 14)',
|
477 |
+
'2/14': 'calc(100% / 14 * 2)',
|
478 |
+
'3/14': 'calc(100% / 14 * 3)',
|
479 |
+
'4/14': 'calc(100% / 14 * 4)',
|
480 |
+
'5/14': 'calc(100% / 14 * 5)',
|
481 |
+
'6/14': 'calc(100% / 14 * 6)',
|
482 |
+
'7/14': 'calc(100% / 14 * 7)',
|
483 |
+
'8/14': 'calc(100% / 14 * 8)',
|
484 |
+
'9/14': 'calc(100% / 14 * 9)',
|
485 |
+
'10/14': 'calc(100% / 14 * 10)',
|
486 |
+
'11/14': 'calc(100% / 14 * 11)',
|
487 |
+
'12/14': 'calc(100% / 14 * 12)',
|
488 |
+
'13/14': 'calc(100% / 14 * 13)',
|
489 |
+
'full': '100%',
|
490 |
+
'screen': '100vw',
|
491 |
+
'carbon-sidebar': 'calc(130px + 3rem)',
|
492 |
+
},
|
493 |
+
height: {
|
494 |
+
'auto': 'auto',
|
495 |
+
'px': '1px',
|
496 |
+
'1': '0.25rem',
|
497 |
+
'2': '0.5rem',
|
498 |
+
'3': '0.75rem',
|
499 |
+
'4': '1rem',
|
500 |
+
'5': '1.25rem',
|
501 |
+
'6': '1.5rem',
|
502 |
+
'8': '2rem',
|
503 |
+
'10': '2.5rem',
|
504 |
+
'12': '3rem',
|
505 |
+
'16': '4rem',
|
506 |
+
'18': '4.25rem',
|
507 |
+
'20': '5rem',
|
508 |
+
'24': '6rem',
|
509 |
+
'32': '8rem',
|
510 |
+
'48': '12rem',
|
511 |
+
'64': '16rem',
|
512 |
+
'full': '100%',
|
513 |
+
'screen': '100vh'
|
514 |
+
},
|
515 |
+
minWidth: {
|
516 |
+
'0': '0',
|
517 |
+
'full': '100%',
|
518 |
+
},
|
519 |
+
minHeight: {
|
520 |
+
'0': '0',
|
521 |
+
'full': '100%',
|
522 |
+
'screen': '100vh'
|
523 |
+
},
|
524 |
+
maxWidth: {
|
525 |
+
'xs': '20rem',
|
526 |
+
'sm': '30rem',
|
527 |
+
'md': '40rem',
|
528 |
+
'lg': '44rem',
|
529 |
+
'xl': '60rem',
|
530 |
+
'2xl': '66rem',
|
531 |
+
'3xl': '80rem',
|
532 |
+
'4xl': '90rem',
|
533 |
+
'5xl': '100rem',
|
534 |
+
'full': '100%',
|
535 |
+
},
|
536 |
+
maxHeight: {
|
537 |
+
'full': '100%',
|
538 |
+
'screen': '100vh',
|
539 |
+
},
|
540 |
+
padding: {
|
541 |
+
'px': '1px',
|
542 |
+
'0': '0',
|
543 |
+
'1': '0.25rem',
|
544 |
+
'2': '0.5rem',
|
545 |
+
'3': '0.75rem',
|
546 |
+
'4': '1rem',
|
547 |
+
'5': '1.25rem',
|
548 |
+
'6': '1.5rem',
|
549 |
+
'8': '2rem',
|
550 |
+
'10': '3rem',
|
551 |
+
'12': '4rem',
|
552 |
+
'14': '6rem',
|
553 |
+
'16': '10rem',
|
554 |
+
},
|
555 |
+
margin: {
|
556 |
+
'auto': 'auto',
|
557 |
+
'px': '1px',
|
558 |
+
'0': '0',
|
559 |
+
'1': '0.25rem',
|
560 |
+
'2': '0.5rem',
|
561 |
+
'3': '0.75rem',
|
562 |
+
'4': '1rem',
|
563 |
+
'6': '1.5rem',
|
564 |
+
'8': '2rem',
|
565 |
+
'10': '3.5rem',
|
566 |
+
'12': '4rem',
|
567 |
+
'14': '6rem',
|
568 |
+
'16': '10rem',
|
569 |
+
},
|
570 |
+
negativeMargin: {
|
571 |
+
'px': '1px',
|
572 |
+
'0': '0',
|
573 |
+
'1': '0.25rem',
|
574 |
+
'2': '0.5rem',
|
575 |
+
'3': '0.75rem',
|
576 |
+
'4': '1rem',
|
577 |
+
'6': '1.5rem',
|
578 |
+
'8': '2rem',
|
579 |
+
'10': '4rem',
|
580 |
+
'12': '4rem',
|
581 |
+
'14': '6rem',
|
582 |
+
'16': '10rem',
|
583 |
+
},
|
584 |
+
|
585 |
+
|
586 |
+
/*
|
587 |
+
|-----------------------------------------------------------------------------
|
588 |
+
| Shadows https://tailwindcss.com/docs/shadows
|
589 |
+
|-----------------------------------------------------------------------------
|
590 |
+
|
|
591 |
+
| Here is where you define your shadow utilities. As you can see from
|
592 |
+
| the defaults we provide, it's possible to apply multiple shadows
|
593 |
+
| per utility using comma separation.
|
594 |
+
|
|
595 |
+
| If a `default` shadow is provided, it will be made available as the non-
|
596 |
+
| suffixed `.shadow` utility.
|
597 |
+
|
|
598 |
+
| Class name: .shadow-{size?}
|
599 |
+
|
|
600 |
+
*/
|
601 |
+
|
602 |
+
shadows: {
|
603 |
+
default: '0 2px 4px 0 rgba(0,0,0,0.10)',
|
604 |
+
'md': '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)',
|
605 |
+
'lg': '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)',
|
606 |
+
'inner': 'inset 0 2px 4px 0 rgba(0,0,0,0.06)',
|
607 |
+
'inner-md': 'inset 0 4px 8px 0 rgba(0,0,0,0.08), inset 0 2px 4px 0 rgba(0,0,0,0.12)',
|
608 |
+
'none': 'none',
|
609 |
+
},
|
610 |
+
|
611 |
+
|
612 |
+
/*
|
613 |
+
|-----------------------------------------------------------------------------
|
614 |
+
| Z-index https://tailwindcss.com/docs/z-index
|
615 |
+
|-----------------------------------------------------------------------------
|
616 |
+
|
|
617 |
+
| Here is where you define your z-index utility values. By default we
|
618 |
+
| provide a sensible numeric scale. You can, of course, modify these
|
619 |
+
| values as needed.
|
620 |
+
|
|
621 |
+
| Class name: .z-{index}
|
622 |
+
|
|
623 |
+
*/
|
624 |
+
|
625 |
+
zIndex: {
|
626 |
+
'auto': 'auto',
|
627 |
+
'0': 0,
|
628 |
+
'10': 10,
|
629 |
+
'20': 20,
|
630 |
+
'30': 30,
|
631 |
+
'40': 40,
|
632 |
+
'50': 50,
|
633 |
+
},
|
634 |
+
|
635 |
+
|
636 |
+
/*
|
637 |
+
|-----------------------------------------------------------------------------
|
638 |
+
| Opacity https://tailwindcss.com/docs/opacity
|
639 |
+
|-----------------------------------------------------------------------------
|
640 |
+
|
|
641 |
+
| Here is where you define your opacity utility values. By default we
|
642 |
+
| provide a sensible numeric scale. You can, of course, modify these
|
643 |
+
| values as needed.
|
644 |
+
|
|
645 |
+
| Class name: .opacity-{name}
|
646 |
+
|
|
647 |
+
*/
|
648 |
+
|
649 |
+
opacity: {
|
650 |
+
'0': '0',
|
651 |
+
'25': '.25',
|
652 |
+
'50': '.5',
|
653 |
+
'75': '.75',
|
654 |
+
'100': '1',
|
655 |
+
},
|
656 |
+
|
657 |
+
|
658 |
+
/*
|
659 |
+
|-----------------------------------------------------------------------------
|
660 |
+
| SVG fill https://tailwindcss.com/docs/svg
|
661 |
+
|-----------------------------------------------------------------------------
|
662 |
+
|
|
663 |
+
| Here is where you define your SVG fill colors. By default we just provide
|
664 |
+
| `fill-current` which sets the fill to the current text color. This lets you
|
665 |
+
| specify a fill color using existing text color utilities and helps keep the
|
666 |
+
| generated CSS file size down.
|
667 |
+
|
|
668 |
+
| Class name: .fill-{name}
|
669 |
+
|
|
670 |
+
*/
|
671 |
+
|
672 |
+
svgFill: {
|
673 |
+
'current': 'currentColor',
|
674 |
+
},
|
675 |
+
|
676 |
+
|
677 |
+
/*
|
678 |
+
|-----------------------------------------------------------------------------
|
679 |
+
| SVG stroke https://tailwindcss.com/docs/svg
|
680 |
+
|-----------------------------------------------------------------------------
|
681 |
+
|
|
682 |
+
| Here is where you define your SVG stroke colors. By default we just provide
|
683 |
+
| `stroke-current` which sets the stroke to the current text color. This lets
|
684 |
+
| you specify a stroke color using existing text color utilities and helps
|
685 |
+
| keep the generated CSS file size down.
|
686 |
+
|
|
687 |
+
| Class name: .stroke-{name}
|
688 |
+
|
|
689 |
+
*/
|
690 |
+
|
691 |
+
svgStroke: {
|
692 |
+
'current': 'currentColor',
|
693 |
+
},
|
694 |
+
|
695 |
+
|
696 |
+
/*
|
697 |
+
|-----------------------------------------------------------------------------
|
698 |
+
| Modules https://tailwindcss.com/docs/configuration#modules
|
699 |
+
|-----------------------------------------------------------------------------
|
700 |
+
|
|
701 |
+
| Here is where you control which modules are generated and what variants are
|
702 |
+
| generated for each of those modules.
|
703 |
+
|
|
704 |
+
| Currently supported variants:
|
705 |
+
| - responsive
|
706 |
+
| - hover
|
707 |
+
| - focus
|
708 |
+
| - active
|
709 |
+
| - group-hover
|
710 |
+
|
|
711 |
+
| To disable a module completely, use `false` instead of an array.
|
712 |
+
|
|
713 |
+
*/
|
714 |
+
|
715 |
+
modules: {
|
716 |
+
appearance: ['responsive'],
|
717 |
+
backgroundAttachment: ['responsive'],
|
718 |
+
backgroundColors: ['responsive', 'hover'],
|
719 |
+
backgroundPosition: ['responsive'],
|
720 |
+
backgroundRepeat: ['responsive'],
|
721 |
+
backgroundSize: ['responsive'],
|
722 |
+
borderColors: ['responsive', 'hover'],
|
723 |
+
borderRadius: ['responsive'],
|
724 |
+
borderStyle: ['responsive'],
|
725 |
+
borderWidths: ['responsive'],
|
726 |
+
cursor: ['responsive'],
|
727 |
+
display: ['responsive'],
|
728 |
+
flexbox: ['responsive'],
|
729 |
+
float: ['responsive'],
|
730 |
+
fonts: ['responsive'],
|
731 |
+
fontWeights: ['responsive', 'hover'],
|
732 |
+
height: ['responsive'],
|
733 |
+
leading: ['responsive'],
|
734 |
+
lists: ['responsive'],
|
735 |
+
margin: ['responsive'],
|
736 |
+
maxHeight: ['responsive'],
|
737 |
+
maxWidth: ['responsive'],
|
738 |
+
minHeight: ['responsive'],
|
739 |
+
minWidth: ['responsive'],
|
740 |
+
negativeMargin: ['responsive'],
|
741 |
+
opacity: ['responsive'],
|
742 |
+
overflow: ['responsive'],
|
743 |
+
padding: ['responsive'],
|
744 |
+
pointerEvents: ['responsive'],
|
745 |
+
position: ['responsive'],
|
746 |
+
resize: ['responsive'],
|
747 |
+
shadows: ['responsive'],
|
748 |
+
svgFill: [],
|
749 |
+
svgStroke: [],
|
750 |
+
textAlign: ['responsive'],
|
751 |
+
textColors: ['responsive', 'hover'],
|
752 |
+
textSizes: ['responsive'],
|
753 |
+
textStyle: ['responsive', 'hover'],
|
754 |
+
tracking: ['responsive'],
|
755 |
+
userSelect: ['responsive'],
|
756 |
+
verticalAlign: ['responsive'],
|
757 |
+
visibility: ['responsive'],
|
758 |
+
whitespace: ['responsive'],
|
759 |
+
width: ['responsive'],
|
760 |
+
zIndex: ['responsive'],
|
761 |
+
},
|
762 |
+
|
763 |
+
|
764 |
+
/*
|
765 |
+
|-----------------------------------------------------------------------------
|
766 |
+
| Plugins https://tailwindcss.com/docs/plugins
|
767 |
+
|-----------------------------------------------------------------------------
|
768 |
+
|
|
769 |
+
| Here is where you can register any plugins you'd like to use in your
|
770 |
+
| project. Tailwind's built-in `container` plugin is enabled by default to
|
771 |
+
| give you a Bootstrap-style responsive container component out of the box.
|
772 |
+
|
|
773 |
+
| Be sure to view the complete plugin documentation to learn more about how
|
774 |
+
| the plugin system works.
|
775 |
+
|
|
776 |
+
*/
|
777 |
+
|
778 |
+
plugins: [
|
779 |
+
require('tailwindcss/plugins/container')({
|
780 |
+
// center: true,
|
781 |
+
// padding: '1rem',
|
782 |
+
}),
|
783 |
+
],
|
784 |
+
|
785 |
+
|
786 |
+
/*
|
787 |
+
|-----------------------------------------------------------------------------
|
788 |
+
| Advanced Options https://tailwindcss.com/docs/configuration#options
|
789 |
+
|-----------------------------------------------------------------------------
|
790 |
+
|
|
791 |
+
| Here is where you can tweak advanced configuration options. We recommend
|
792 |
+
| leaving these options alone unless you absolutely need to change them.
|
793 |
+
|
|
794 |
+
*/
|
795 |
+
|
796 |
+
options: {
|
797 |
+
prefix: '',
|
798 |
+
important: false,
|
799 |
+
separator: ':',
|
800 |
+
},
|
801 |
+
|
802 |
+
}
|
vendor/league/flysystem/docs/usage/filesystem-api.md
ADDED
@@ -0,0 +1,363 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
permalink: /docs/usage/filesystem-api/
|
4 |
+
redirect_from: /api/
|
5 |
+
title: API
|
6 |
+
alternate_title: Filesystem API
|
7 |
+
---
|
8 |
+
|
9 |
+
The Filesystem API is the most important interface Flysystem describes
|
10 |
+
when you want to _use_ Flysystem in your application.
|
11 |
+
|
12 |
+
## Write Files
|
13 |
+
|
14 |
+
```php
|
15 |
+
$response = $filesystem->write($path, $contents);
|
16 |
+
```
|
17 |
+
|
18 |
+
param | description | type
|
19 |
+
------------- | ------------------------ | -----------
|
20 |
+
`$path` | location of a file | `string`
|
21 |
+
`$contents` | file contents | `string`
|
22 |
+
`$response` | success boolean | `bool`
|
23 |
+
|
24 |
+
---
|
25 |
+
|
26 |
+
## Write Files using a stream
|
27 |
+
|
28 |
+
```php
|
29 |
+
$response = $filesystem->writeStream($path, $resource);
|
30 |
+
```
|
31 |
+
|
32 |
+
param | description | type
|
33 |
+
------------- | ------------------------ | -----------
|
34 |
+
`$path` | location of a file | `string`
|
35 |
+
`$resource` | file stream | `resource`
|
36 |
+
`$response` | success boolean | `bool`
|
37 |
+
|
38 |
+
---
|
39 |
+
|
40 |
+
## Update Files
|
41 |
+
|
42 |
+
```php
|
43 |
+
$response = $filesystem->update($path, $contents);
|
44 |
+
```
|
45 |
+
|
46 |
+
param | description | type
|
47 |
+
------------- | ------------------------ | -----------
|
48 |
+
`$path` | location of a file | `string`
|
49 |
+
`$contents` | file contents | `string`
|
50 |
+
`$response` | success boolean | `bool`
|
51 |
+
|
52 |
+
---
|
53 |
+
|
54 |
+
## Update Files using a stream
|
55 |
+
|
56 |
+
```php
|
57 |
+
$response = $filesystem->updateStream($path, $contents);
|
58 |
+
```
|
59 |
+
|
60 |
+
param | description | type
|
61 |
+
------------- | ------------------------ | -----------
|
62 |
+
`$path` | location of a file | `string`
|
63 |
+
`$resource` | file stream | `resource`
|
64 |
+
`$response` | success boolean | `bool`
|
65 |
+
|
66 |
+
---
|
67 |
+
|
68 |
+
## Write or Update Files
|
69 |
+
|
70 |
+
```php
|
71 |
+
$response = $filesystem->put($path, $contents);
|
72 |
+
```
|
73 |
+
|
74 |
+
param | description | type
|
75 |
+
------------- | ------------------------ | -----------
|
76 |
+
`$path` | location of a file | `string`
|
77 |
+
`$contents` | file contents | `string`
|
78 |
+
`$response` | success boolean | `bool`
|
79 |
+
|
80 |
+
---
|
81 |
+
|
82 |
+
## Write or Update Files using a stream
|
83 |
+
|
84 |
+
```php
|
85 |
+
$response = $filesystem->putStream($path, $resource);
|
86 |
+
```
|
87 |
+
|
88 |
+
param | description | type
|
89 |
+
------------- | ------------------------ | -----------
|
90 |
+
`$path` | location of a file | `string`
|
91 |
+
`$resource` | file stream | `resource`
|
92 |
+
`$response` | success boolean | `bool`
|
93 |
+
|
94 |
+
---
|
95 |
+
|
96 |
+
## Read Files
|
97 |
+
|
98 |
+
```php
|
99 |
+
$contents = $filesystem->read($path);
|
100 |
+
```
|
101 |
+
|
102 |
+
param | description | type
|
103 |
+
------------- | ------------------------ | -----------
|
104 |
+
`$path` | location of a file | `string`
|
105 |
+
`$contents` | file contents | `string`
|
106 |
+
|
107 |
+
---
|
108 |
+
|
109 |
+
## Read Files as a stream
|
110 |
+
|
111 |
+
```php
|
112 |
+
$contents = $filesystem->readStream($path);
|
113 |
+
```
|
114 |
+
|
115 |
+
param | description | type
|
116 |
+
------------- | ------------------------ | -----------
|
117 |
+
`$path` | location of a file | `string`
|
118 |
+
`$resource` | file stream | `string`
|
119 |
+
|
120 |
+
---
|
121 |
+
|
122 |
+
## Check if a file exists
|
123 |
+
|
124 |
+
```php
|
125 |
+
$exists = $filesystem->has($path);
|
126 |
+
```
|
127 |
+
|
128 |
+
param | description | type
|
129 |
+
------------- | ------------------------- | -----------
|
130 |
+
`$path` | location of a file | `string`
|
131 |
+
`$exists` | whether the file exists | `bool`
|
132 |
+
|
133 |
+
> This only has consistent behaviour for files, not directories. Directories
|
134 |
+
> are less important in Flysystem, they're created implicitly and often ignored because
|
135 |
+
> not every adapter (filesystem type) supports directories.
|
136 |
+
|
137 |
+
---
|
138 |
+
|
139 |
+
## Delete Files
|
140 |
+
|
141 |
+
```php
|
142 |
+
$response = $filesystem->delete($path);
|
143 |
+
```
|
144 |
+
|
145 |
+
param | description | type
|
146 |
+
------------- | ------------------------ | -----------
|
147 |
+
`$path` | location of a file | `string`
|
148 |
+
`$response` | success boolean | `bool`
|
149 |
+
|
150 |
+
---
|
151 |
+
|
152 |
+
## Read and Delete
|
153 |
+
|
154 |
+
```php
|
155 |
+
$contents = $filesystem->readAndDelete($path);
|
156 |
+
```
|
157 |
+
|
158 |
+
param | description | type
|
159 |
+
------------- | ------------------------ | -----------
|
160 |
+
`$path` | location of a file | `string`
|
161 |
+
`$contents` | file contents | `string`
|
162 |
+
|
163 |
+
---
|
164 |
+
|
165 |
+
## Rename Files
|
166 |
+
|
167 |
+
```php
|
168 |
+
$response = $filesystem->rename($from, $to);
|
169 |
+
```
|
170 |
+
|
171 |
+
param | description | type
|
172 |
+
------------- | ------------------------ | -----------
|
173 |
+
`$from` | location of a file | `string`
|
174 |
+
`$to` | new location | `string`
|
175 |
+
`$response` | success boolean | `bool`
|
176 |
+
|
177 |
+
---
|
178 |
+
|
179 |
+
## Copy Files
|
180 |
+
|
181 |
+
```php
|
182 |
+
$response $filesystem->copy($from, $to);
|
183 |
+
```
|
184 |
+
|
185 |
+
param | description | type
|
186 |
+
------------- | ------------------------ | -----------
|
187 |
+
`$from` | location of a file | `string`
|
188 |
+
`$to` | new location | `string`
|
189 |
+
`$response` | success boolean | `bool`
|
190 |
+
|
191 |
+
---
|
192 |
+
|
193 |
+
## Get Mimetypes
|
194 |
+
|
195 |
+
```php
|
196 |
+
$response = $filesystem->getMimetype($path);
|
197 |
+
```
|
198 |
+
|
199 |
+
param | description | type
|
200 |
+
------------- | ------------------------ | -----------
|
201 |
+
`$path` | location of a file | `string`
|
202 |
+
`$response` | mime-type | `string`
|
203 |
+
|
204 |
+
---
|
205 |
+
|
206 |
+
## Get Timestamps
|
207 |
+
|
208 |
+
This function returns the last updated timestamp.
|
209 |
+
|
210 |
+
```php
|
211 |
+
$response = $filesystem->getTimestamp($path);
|
212 |
+
```
|
213 |
+
|
214 |
+
param | description | type
|
215 |
+
------------- | ------------------------- | -----------
|
216 |
+
`$path` | location of a file | `string`
|
217 |
+
`$response` | timestamp of modification | `integer`
|
218 |
+
|
219 |
+
---
|
220 |
+
|
221 |
+
## Get File Sizes
|
222 |
+
|
223 |
+
```php
|
224 |
+
$response = $filesystem->getSize($path);
|
225 |
+
```
|
226 |
+
|
227 |
+
param | description | type
|
228 |
+
------------- | ------------------------- | -----------
|
229 |
+
`$path` | location of a file | `string`
|
230 |
+
`$response` | size of a file | `integer`
|
231 |
+
|
232 |
+
---
|
233 |
+
|
234 |
+
## Create Directories
|
235 |
+
|
236 |
+
```php
|
237 |
+
$response = $filesystem->createDir($path);
|
238 |
+
```
|
239 |
+
|
240 |
+
param | description | type
|
241 |
+
------------- | ------------------------- | -----------
|
242 |
+
`$path` | location of a file | `string`
|
243 |
+
`$response` | size of a file | `integer`
|
244 |
+
|
245 |
+
Directories are also made implicitly when writing to a deeper path.
|
246 |
+
In general creating a directory is __not__ required in order to write
|
247 |
+
to it.
|
248 |
+
|
249 |
+
---
|
250 |
+
|
251 |
+
## Delete Directories
|
252 |
+
|
253 |
+
Deleting directories is always done recursively.
|
254 |
+
|
255 |
+
```php
|
256 |
+
$response = $filesystem->deleteDir($path);
|
257 |
+
```
|
258 |
+
|
259 |
+
param | description | type
|
260 |
+
------------- | ------------------------- | -----------
|
261 |
+
`$path` | location of a file | `string`
|
262 |
+
`$response` | success boolean | `boolean`
|
263 |
+
|
264 |
+
|
265 |
+
---
|
266 |
+
|
267 |
+
## Manage Visibility
|
268 |
+
|
269 |
+
Visibility is the abstraction of file permissions across multiple platforms. Visibility can be either public or private.
|
270 |
+
|
271 |
+
```php
|
272 |
+
use League\Flysystem\AdapterInterface;
|
273 |
+
|
274 |
+
$filesystem->write($path, $contents, [
|
275 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
276 |
+
]);
|
277 |
+
|
278 |
+
// or simply
|
279 |
+
|
280 |
+
$filesystem->write($path, $contents, ['visibility' => 'private']);
|
281 |
+
```
|
282 |
+
|
283 |
+
You can also change and check visibility of existing files:
|
284 |
+
|
285 |
+
```php
|
286 |
+
if ($filesystem->getVisibility($path) === 'private') {
|
287 |
+
$filesystem->setVisibility($path, 'public');
|
288 |
+
}
|
289 |
+
```
|
290 |
+
|
291 |
+
---
|
292 |
+
|
293 |
+
## Global visibility setting
|
294 |
+
|
295 |
+
You can set the visibility as a default, which prevents you from setting it all over the place.
|
296 |
+
|
297 |
+
```php
|
298 |
+
$filesystem = new League\Flysystem\Filesystem($adapter, [
|
299 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
300 |
+
]);
|
301 |
+
```
|
302 |
+
|
303 |
+
---
|
304 |
+
|
305 |
+
## List Contents
|
306 |
+
|
307 |
+
```php
|
308 |
+
$contents = $filesystem->listContents($path, $recursive);
|
309 |
+
```
|
310 |
+
|
311 |
+
The result of a contents listing is a collection of arrays containing all the metadata the file manager knows at that time. By default you'll receive path info and file type. Additional info could be supplied by default depending on the adapter used.
|
312 |
+
|
313 |
+
Example:
|
314 |
+
|
315 |
+
```php
|
316 |
+
foreach ($contents as $object) {
|
317 |
+
echo $object['basename'].' is located at '.$object['path'].' and is a '.$object['type'];
|
318 |
+
}
|
319 |
+
```
|
320 |
+
|
321 |
+
By default Flysystem lists the top directory non-recursively. You can supply a directory name and recursive boolean to get more precise results
|
322 |
+
|
323 |
+
```php
|
324 |
+
$contents = $filesystem->listContents('some/dir', true);
|
325 |
+
```
|
326 |
+
|
327 |
+
---
|
328 |
+
|
329 |
+
## Using streams for reads and writes
|
330 |
+
|
331 |
+
Some SDK's close streams after consuming them, therefore, before calling fclose on the resource, check if it's still valid using <code>is_resource</code>.
|
332 |
+
|
333 |
+
```php
|
334 |
+
$stream = fopen('/path/to/database.backup', 'r+');
|
335 |
+
$filesystem->writeStream('backups/'.strftime('%G-%m-%d').'.backup', $stream);
|
336 |
+
|
337 |
+
// Using write you can also directly set the visibility
|
338 |
+
$filesystem->writeStream('backups/'.strftime('%G-%m-%d').'.backup', $stream, [
|
339 |
+
'visibility' => AdapterInterface::VISIBILITY_PRIVATE
|
340 |
+
]);
|
341 |
+
|
342 |
+
if (is_resource($stream)) {
|
343 |
+
fclose($stream);
|
344 |
+
}
|
345 |
+
|
346 |
+
// Or update a file with stream contents
|
347 |
+
$filesystem->updateStream('backups/'.strftime('%G-%m-%d').'.backup', $stream);
|
348 |
+
|
349 |
+
// Retrieve a read-stream
|
350 |
+
$stream = $filesystem->readStream('something/is/here.ext');
|
351 |
+
$contents = stream_get_contents($stream);
|
352 |
+
fclose($stream);
|
353 |
+
|
354 |
+
// Create or overwrite using a stream.
|
355 |
+
$putStream = tmpfile();
|
356 |
+
fwrite($putStream, $contents);
|
357 |
+
rewind($putStream);
|
358 |
+
$filesystem->putStream('somewhere/here.txt', $putStream);
|
359 |
+
|
360 |
+
if (is_resource($putStream)) {
|
361 |
+
fclose($putStream);
|
362 |
+
}
|
363 |
+
```
|
vendor/league/flysystem/docs/usage/setup.md
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
layout: default
|
3 |
+
title: Setup / Bootstrap
|
4 |
+
permalink: /docs/usage/setup/
|
5 |
+
---
|
6 |
+
|
7 |
+
As explained in the [architecture description](/docs/architecture/), Flysystem uses
|
8 |
+
the _adapter pattern_. This means you'll always need an __adapter__, which needs to
|
9 |
+
be wrapped in a `Filesystem` instance.
|
10 |
+
|
11 |
+
## Adapter Setup
|
12 |
+
|
13 |
+
Each adapter has their own setup and dependencies. For each adapter a setup guide is
|
14 |
+
provided. You can find the guides in the `adapters` section in the menu.
|
15 |
+
|
16 |
+
For this example we'll use the local adapter:
|
17 |
+
|
18 |
+
```php
|
19 |
+
<?php
|
20 |
+
|
21 |
+
use League\Flysystem\Adapter\Local;
|
22 |
+
|
23 |
+
$adapter = new Local(__DIR__.'/path/to/root/');
|
24 |
+
```
|
25 |
+
|
26 |
+
## Setup Filesystem
|
27 |
+
|
28 |
+
Now that you've got your adapter setup you can use it to create the filesystem:
|
29 |
+
|
30 |
+
```php
|
31 |
+
<?php
|
32 |
+
|
33 |
+
use League\Flysystem\Filesystem;
|
34 |
+
|
35 |
+
$filesystem = new Filesystem($adapter);
|
36 |
+
```
|
37 |
+
|
38 |
+
## Global Configuration
|
39 |
+
|
40 |
+
Adapters each have their own configuration. Apart from adapter constructors configuration
|
41 |
+
options can be provided in global configuration through the `Filesystem`.
|
42 |
+
|
43 |
+
```php
|
44 |
+
<?php
|
45 |
+
|
46 |
+
use League\Flysystem\Filesystem;
|
47 |
+
|
48 |
+
$filesystem = new Filesystem($adapter, ['visibility' => 'public']);
|
49 |
+
```
|
50 |
+
|
51 |
+
The global available configuration options are:
|
52 |
+
|
53 |
+
option | description | type
|
54 |
+
------------- | ------------------------ | -----------
|
55 |
+
`visibility` | default visibility | `string`
|
vendor/league/flysystem/docs/webpack.config.js
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
2 |
+
const PurgecssPlugin = require('purgecss-webpack-plugin');
|
3 |
+
const glob = require('glob-all');
|
4 |
+
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
5 |
+
const path = require('path');
|
6 |
+
|
7 |
+
class TailwindExtractor {
|
8 |
+
static extract(content) {
|
9 |
+
return content.match(/[A-z0-9-:\/]+/g);
|
10 |
+
}
|
11 |
+
}
|
12 |
+
|
13 |
+
let plugins = [
|
14 |
+
new ExtractTextPlugin('styles.css'),
|
15 |
+
new OptimizeCssAssetsPlugin(),
|
16 |
+
];
|
17 |
+
|
18 |
+
let isProd = process.env.NODE_ENV === 'production';
|
19 |
+
|
20 |
+
if (isProd) {
|
21 |
+
plugins.push(new PurgecssPlugin({
|
22 |
+
paths: glob.sync([
|
23 |
+
path.join(__dirname, "_site/**/*.html"),
|
24 |
+
]),
|
25 |
+
extractors: [{
|
26 |
+
extractor: TailwindExtractor,
|
27 |
+
extensions: ["html"]
|
28 |
+
}]
|
29 |
+
}));
|
30 |
+
}
|
31 |
+
|
32 |
+
module.exports = {
|
33 |
+
entry: './index.js',
|
34 |
+
output: {
|
35 |
+
path: path.resolve(__dirname, 'dist'),
|
36 |
+
filename: '[name].js',
|
37 |
+
},
|
38 |
+
module: {
|
39 |
+
rules: [
|
40 |
+
{
|
41 |
+
test: /\.css$/,
|
42 |
+
use: ExtractTextPlugin.extract({
|
43 |
+
fallback: 'style-loader',
|
44 |
+
use: [
|
45 |
+
{ loader: 'css-loader', options: { importLoaders: 1 } },
|
46 |
+
'postcss-loader'
|
47 |
+
]
|
48 |
+
})
|
49 |
+
}
|
50 |
+
]
|
51 |
+
},
|
52 |
+
plugins: plugins,
|
53 |
+
};
|
vendor/league/flysystem/docs/yarn.lock
ADDED
@@ -0,0 +1,5529 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2 |
+
# yarn lockfile v1
|
3 |
+
|
4 |
+
|
5 |
+
"@sindresorhus/is@^0.7.0":
|
6 |
+
version "0.7.0"
|
7 |
+
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
|
8 |
+
|
9 |
+
abbrev@1:
|
10 |
+
version "1.1.1"
|
11 |
+
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
12 |
+
|
13 |
+
acorn-dynamic-import@^3.0.0:
|
14 |
+
version "3.0.0"
|
15 |
+
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
|
16 |
+
dependencies:
|
17 |
+
acorn "^5.0.0"
|
18 |
+
|
19 |
+
acorn@^5.0.0:
|
20 |
+
version "5.5.3"
|
21 |
+
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
|
22 |
+
|
23 |
+
ajv-keywords@^3.1.0:
|
24 |
+
version "3.1.0"
|
25 |
+
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be"
|
26 |
+
|
27 |
+
ajv@^4.9.1:
|
28 |
+
version "4.11.8"
|
29 |
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
|
30 |
+
dependencies:
|
31 |
+
co "^4.6.0"
|
32 |
+
json-stable-stringify "^1.0.1"
|
33 |
+
|
34 |
+
ajv@^6.1.0:
|
35 |
+
version "6.4.0"
|
36 |
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6"
|
37 |
+
dependencies:
|
38 |
+
fast-deep-equal "^1.0.0"
|
39 |
+
fast-json-stable-stringify "^2.0.0"
|
40 |
+
json-schema-traverse "^0.3.0"
|
41 |
+
uri-js "^3.0.2"
|
42 |
+
|
43 |
+
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
|
44 |
+
version "1.0.2"
|
45 |
+
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
|
46 |
+
|
47 |
+
ansi-escapes@^1.0.0:
|
48 |
+
version "1.4.0"
|
49 |
+
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
|
50 |
+
|
51 |
+
ansi-escapes@^3.0.0:
|
52 |
+
version "3.1.0"
|
53 |
+
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
|
54 |
+
|
55 |
+
ansi-regex@^2.0.0:
|
56 |
+
version "2.1.1"
|
57 |
+
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
58 |
+
|
59 |
+
ansi-regex@^3.0.0:
|
60 |
+
version "3.0.0"
|
61 |
+
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
62 |
+
|
63 |
+
ansi-styles@^2.2.1:
|
64 |
+
version "2.2.1"
|
65 |
+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
66 |
+
|
67 |
+
ansi-styles@^3.2.1:
|
68 |
+
version "3.2.1"
|
69 |
+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
70 |
+
dependencies:
|
71 |
+
color-convert "^1.9.0"
|
72 |
+
|
73 |
+
ansi-styles@~1.0.0:
|
74 |
+
version "1.0.0"
|
75 |
+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
|
76 |
+
|
77 |
+
any-observable@^0.2.0:
|
78 |
+
version "0.2.0"
|
79 |
+
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
|
80 |
+
|
81 |
+
anymatch@^2.0.0:
|
82 |
+
version "2.0.0"
|
83 |
+
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
84 |
+
dependencies:
|
85 |
+
micromatch "^3.1.4"
|
86 |
+
normalize-path "^2.1.1"
|
87 |
+
|
88 |
+
aproba@^1.0.3, aproba@^1.1.1:
|
89 |
+
version "1.2.0"
|
90 |
+
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
91 |
+
|
92 |
+
are-we-there-yet@~1.1.2:
|
93 |
+
version "1.1.4"
|
94 |
+
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
|
95 |
+
dependencies:
|
96 |
+
delegates "^1.0.0"
|
97 |
+
readable-stream "^2.0.6"
|
98 |
+
|
99 |
+
argparse@^1.0.7:
|
100 |
+
version "1.0.10"
|
101 |
+
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
102 |
+
dependencies:
|
103 |
+
sprintf-js "~1.0.2"
|
104 |
+
|
105 |
+
arr-diff@^2.0.0:
|
106 |
+
version "2.0.0"
|
107 |
+
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
|
108 |
+
dependencies:
|
109 |
+
arr-flatten "^1.0.1"
|
110 |
+
|
111 |
+
arr-diff@^4.0.0:
|
112 |
+
version "4.0.0"
|
113 |
+
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
|
114 |
+
|
115 |
+
arr-flatten@^1.0.1, arr-flatten@^1.1.0:
|
116 |
+
version "1.1.0"
|
117 |
+
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
|
118 |
+
|
119 |
+
arr-union@^3.1.0:
|
120 |
+
version "3.1.0"
|
121 |
+
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
|
122 |
+
|
123 |
+
array-differ@^1.0.0:
|
124 |
+
version "1.0.0"
|
125 |
+
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
|
126 |
+
|
127 |
+
array-union@^1.0.1:
|
128 |
+
version "1.0.2"
|
129 |
+
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
130 |
+
dependencies:
|
131 |
+
array-uniq "^1.0.1"
|
132 |
+
|
133 |
+
array-uniq@^1.0.1:
|
134 |
+
version "1.0.3"
|
135 |
+
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
|
136 |
+
|
137 |
+
array-unique@^0.2.1:
|
138 |
+
version "0.2.1"
|
139 |
+
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
|
140 |
+
|
141 |
+
array-unique@^0.3.2:
|
142 |
+
version "0.3.2"
|
143 |
+
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
144 |
+
|
145 |
+
arrify@^1.0.0:
|
146 |
+
version "1.0.1"
|
147 |
+
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
148 |
+
|
149 |
+
asn1.js@^4.0.0:
|
150 |
+
version "4.10.1"
|
151 |
+
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
|
152 |
+
dependencies:
|
153 |
+
bn.js "^4.0.0"
|
154 |
+
inherits "^2.0.1"
|
155 |
+
minimalistic-assert "^1.0.0"
|
156 |
+
|
157 |
+
asn1@~0.2.3:
|
158 |
+
version "0.2.3"
|
159 |
+
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
|
160 |
+
|
161 |
+
assert-plus@1.0.0, assert-plus@^1.0.0:
|
162 |
+
version "1.0.0"
|
163 |
+
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
164 |
+
|
165 |
+
assert-plus@^0.2.0:
|
166 |
+
version "0.2.0"
|
167 |
+
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
|
168 |
+
|
169 |
+
assert@^1.1.1:
|
170 |
+
version "1.4.1"
|
171 |
+
resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
|
172 |
+
dependencies:
|
173 |
+
util "0.10.3"
|
174 |
+
|
175 |
+
assign-symbols@^1.0.0:
|
176 |
+
version "1.0.0"
|
177 |
+
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
|
178 |
+
|
179 |
+
ast-types@0.10.1:
|
180 |
+
version "0.10.1"
|
181 |
+
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd"
|
182 |
+
|
183 |
+
ast-types@0.11.3:
|
184 |
+
version "0.11.3"
|
185 |
+
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8"
|
186 |
+
|
187 |
+
async-each@^1.0.0:
|
188 |
+
version "1.0.1"
|
189 |
+
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
|
190 |
+
|
191 |
+
async@^1.5.0:
|
192 |
+
version "1.5.2"
|
193 |
+
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
|
194 |
+
|
195 |
+
async@^2.4.1, async@^2.6.0:
|
196 |
+
version "2.6.0"
|
197 |
+
resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
|
198 |
+
dependencies:
|
199 |
+
lodash "^4.14.0"
|
200 |
+
|
201 |
+
asynckit@^0.4.0:
|
202 |
+
version "0.4.0"
|
203 |
+
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
204 |
+
|
205 |
+
atob@^2.0.0:
|
206 |
+
version "2.1.0"
|
207 |
+
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc"
|
208 |
+
|
209 |
+
autoprefixer@^6.3.1:
|
210 |
+
version "6.7.7"
|
211 |
+
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
212 |
+
dependencies:
|
213 |
+
browserslist "^1.7.6"
|
214 |
+
caniuse-db "^1.0.30000634"
|
215 |
+
normalize-range "^0.1.2"
|
216 |
+
num2fraction "^1.2.2"
|
217 |
+
postcss "^5.2.16"
|
218 |
+
postcss-value-parser "^3.2.3"
|
219 |
+
|
220 |
+
aws-sign2@~0.6.0:
|
221 |
+
version "0.6.0"
|
222 |
+
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
|
223 |
+
|
224 |
+
aws4@^1.2.1:
|
225 |
+
version "1.7.0"
|
226 |
+
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
|
227 |
+
|
228 |
+
babel-code-frame@^6.26.0:
|
229 |
+
version "6.26.0"
|
230 |
+
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
231 |
+
dependencies:
|
232 |
+
chalk "^1.1.3"
|
233 |
+
esutils "^2.0.2"
|
234 |
+
js-tokens "^3.0.2"
|
235 |
+
|
236 |
+
babel-core@^6.26.0:
|
237 |
+
version "6.26.0"
|
238 |
+
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
|
239 |
+
dependencies:
|
240 |
+
babel-code-frame "^6.26.0"
|
241 |
+
babel-generator "^6.26.0"
|
242 |
+
babel-helpers "^6.24.1"
|
243 |
+
babel-messages "^6.23.0"
|
244 |
+
babel-register "^6.26.0"
|
245 |
+
babel-runtime "^6.26.0"
|
246 |
+
babel-template "^6.26.0"
|
247 |
+
babel-traverse "^6.26.0"
|
248 |
+
babel-types "^6.26.0"
|
249 |
+
babylon "^6.18.0"
|
250 |
+
convert-source-map "^1.5.0"
|
251 |
+
debug "^2.6.8"
|
252 |
+
json5 "^0.5.1"
|
253 |
+
lodash "^4.17.4"
|
254 |
+
minimatch "^3.0.4"
|
255 |
+
path-is-absolute "^1.0.1"
|
256 |
+
private "^0.1.7"
|
257 |
+
slash "^1.0.0"
|
258 |
+
source-map "^0.5.6"
|
259 |
+
|
260 |
+
babel-generator@^6.26.0:
|
261 |
+
version "6.26.1"
|
262 |
+
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
|
263 |
+
dependencies:
|
264 |
+
babel-messages "^6.23.0"
|
265 |
+
babel-runtime "^6.26.0"
|
266 |
+
babel-types "^6.26.0"
|
267 |
+
detect-indent "^4.0.0"
|
268 |
+
jsesc "^1.3.0"
|
269 |
+
lodash "^4.17.4"
|
270 |
+
source-map "^0.5.7"
|
271 |
+
trim-right "^1.0.1"
|
272 |
+
|
273 |
+
babel-helper-bindify-decorators@^6.24.1:
|
274 |
+
version "6.24.1"
|
275 |
+
resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
|
276 |
+
dependencies:
|
277 |
+
babel-runtime "^6.22.0"
|
278 |
+
babel-traverse "^6.24.1"
|
279 |
+
babel-types "^6.24.1"
|
280 |
+
|
281 |
+
babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
|
282 |
+
version "6.24.1"
|
283 |
+
resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
|
284 |
+
dependencies:
|
285 |
+
babel-helper-explode-assignable-expression "^6.24.1"
|
286 |
+
babel-runtime "^6.22.0"
|
287 |
+
babel-types "^6.24.1"
|
288 |
+
|
289 |
+
babel-helper-call-delegate@^6.24.1:
|
290 |
+
version "6.24.1"
|
291 |
+
resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
|
292 |
+
dependencies:
|
293 |
+
babel-helper-hoist-variables "^6.24.1"
|
294 |
+
babel-runtime "^6.22.0"
|
295 |
+
babel-traverse "^6.24.1"
|
296 |
+
babel-types "^6.24.1"
|
297 |
+
|
298 |
+
babel-helper-define-map@^6.24.1:
|
299 |
+
version "6.26.0"
|
300 |
+
resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
|
301 |
+
dependencies:
|
302 |
+
babel-helper-function-name "^6.24.1"
|
303 |
+
babel-runtime "^6.26.0"
|
304 |
+
babel-types "^6.26.0"
|
305 |
+
lodash "^4.17.4"
|
306 |
+
|
307 |
+
babel-helper-explode-assignable-expression@^6.24.1:
|
308 |
+
version "6.24.1"
|
309 |
+
resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
|
310 |
+
dependencies:
|
311 |
+
babel-runtime "^6.22.0"
|
312 |
+
babel-traverse "^6.24.1"
|
313 |
+
babel-types "^6.24.1"
|
314 |
+
|
315 |
+
babel-helper-explode-class@^6.24.1:
|
316 |
+
version "6.24.1"
|
317 |
+
resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
|
318 |
+
dependencies:
|
319 |
+
babel-helper-bindify-decorators "^6.24.1"
|
320 |
+
babel-runtime "^6.22.0"
|
321 |
+
babel-traverse "^6.24.1"
|
322 |
+
babel-types "^6.24.1"
|
323 |
+
|
324 |
+
babel-helper-function-name@^6.24.1:
|
325 |
+
version "6.24.1"
|
326 |
+
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
|
327 |
+
dependencies:
|
328 |
+
babel-helper-get-function-arity "^6.24.1"
|
329 |
+
babel-runtime "^6.22.0"
|
330 |
+
babel-template "^6.24.1"
|
331 |
+
babel-traverse "^6.24.1"
|
332 |
+
babel-types "^6.24.1"
|
333 |
+
|
334 |
+
babel-helper-get-function-arity@^6.24.1:
|
335 |
+
version "6.24.1"
|
336 |
+
resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
|
337 |
+
dependencies:
|
338 |
+
babel-runtime "^6.22.0"
|
339 |
+
babel-types "^6.24.1"
|
340 |
+
|
341 |
+
babel-helper-hoist-variables@^6.24.1:
|
342 |
+
version "6.24.1"
|
343 |
+
resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
|
344 |
+
dependencies:
|
345 |
+
babel-runtime "^6.22.0"
|
346 |
+
babel-types "^6.24.1"
|
347 |
+
|
348 |
+
babel-helper-optimise-call-expression@^6.24.1:
|
349 |
+
version "6.24.1"
|
350 |
+
resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
|
351 |
+
dependencies:
|
352 |
+
babel-runtime "^6.22.0"
|
353 |
+
babel-types "^6.24.1"
|
354 |
+
|
355 |
+
babel-helper-regex@^6.24.1:
|
356 |
+
version "6.26.0"
|
357 |
+
resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
|
358 |
+
dependencies:
|
359 |
+
babel-runtime "^6.26.0"
|
360 |
+
babel-types "^6.26.0"
|
361 |
+
lodash "^4.17.4"
|
362 |
+
|
363 |
+
babel-helper-remap-async-to-generator@^6.24.1:
|
364 |
+
version "6.24.1"
|
365 |
+
resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
|
366 |
+
dependencies:
|
367 |
+
babel-helper-function-name "^6.24.1"
|
368 |
+
babel-runtime "^6.22.0"
|
369 |
+
babel-template "^6.24.1"
|
370 |
+
babel-traverse "^6.24.1"
|
371 |
+
babel-types "^6.24.1"
|
372 |
+
|
373 |
+
babel-helper-replace-supers@^6.24.1:
|
374 |
+
version "6.24.1"
|
375 |
+
resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
|
376 |
+
dependencies:
|
377 |
+
babel-helper-optimise-call-expression "^6.24.1"
|
378 |
+
babel-messages "^6.23.0"
|
379 |
+
babel-runtime "^6.22.0"
|
380 |
+
babel-template "^6.24.1"
|
381 |
+
babel-traverse "^6.24.1"
|
382 |
+
babel-types "^6.24.1"
|
383 |
+
|
384 |
+
babel-helpers@^6.24.1:
|
385 |
+
version "6.24.1"
|
386 |
+
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
|
387 |
+
dependencies:
|
388 |
+
babel-runtime "^6.22.0"
|
389 |
+
babel-template "^6.24.1"
|
390 |
+
|
391 |
+
babel-messages@^6.23.0:
|
392 |
+
version "6.23.0"
|
393 |
+
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
|
394 |
+
dependencies:
|
395 |
+
babel-runtime "^6.22.0"
|
396 |
+
|
397 |
+
babel-plugin-check-es2015-constants@^6.22.0:
|
398 |
+
version "6.22.0"
|
399 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
|
400 |
+
dependencies:
|
401 |
+
babel-runtime "^6.22.0"
|
402 |
+
|
403 |
+
babel-plugin-syntax-async-functions@^6.8.0:
|
404 |
+
version "6.13.0"
|
405 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
|
406 |
+
|
407 |
+
babel-plugin-syntax-async-generators@^6.5.0:
|
408 |
+
version "6.13.0"
|
409 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
|
410 |
+
|
411 |
+
babel-plugin-syntax-class-constructor-call@^6.18.0:
|
412 |
+
version "6.18.0"
|
413 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416"
|
414 |
+
|
415 |
+
babel-plugin-syntax-class-properties@^6.8.0:
|
416 |
+
version "6.13.0"
|
417 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
|
418 |
+
|
419 |
+
babel-plugin-syntax-decorators@^6.13.0:
|
420 |
+
version "6.13.0"
|
421 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
|
422 |
+
|
423 |
+
babel-plugin-syntax-dynamic-import@^6.18.0:
|
424 |
+
version "6.18.0"
|
425 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
|
426 |
+
|
427 |
+
babel-plugin-syntax-exponentiation-operator@^6.8.0:
|
428 |
+
version "6.13.0"
|
429 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
|
430 |
+
|
431 |
+
babel-plugin-syntax-export-extensions@^6.8.0:
|
432 |
+
version "6.13.0"
|
433 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721"
|
434 |
+
|
435 |
+
babel-plugin-syntax-flow@^6.18.0:
|
436 |
+
version "6.18.0"
|
437 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
|
438 |
+
|
439 |
+
babel-plugin-syntax-object-rest-spread@^6.8.0:
|
440 |
+
version "6.13.0"
|
441 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
|
442 |
+
|
443 |
+
babel-plugin-syntax-trailing-function-commas@^6.22.0:
|
444 |
+
version "6.22.0"
|
445 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
|
446 |
+
|
447 |
+
babel-plugin-transform-async-generator-functions@^6.24.1:
|
448 |
+
version "6.24.1"
|
449 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
|
450 |
+
dependencies:
|
451 |
+
babel-helper-remap-async-to-generator "^6.24.1"
|
452 |
+
babel-plugin-syntax-async-generators "^6.5.0"
|
453 |
+
babel-runtime "^6.22.0"
|
454 |
+
|
455 |
+
babel-plugin-transform-async-to-generator@^6.24.1:
|
456 |
+
version "6.24.1"
|
457 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
|
458 |
+
dependencies:
|
459 |
+
babel-helper-remap-async-to-generator "^6.24.1"
|
460 |
+
babel-plugin-syntax-async-functions "^6.8.0"
|
461 |
+
babel-runtime "^6.22.0"
|
462 |
+
|
463 |
+
babel-plugin-transform-class-constructor-call@^6.24.1:
|
464 |
+
version "6.24.1"
|
465 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
|
466 |
+
dependencies:
|
467 |
+
babel-plugin-syntax-class-constructor-call "^6.18.0"
|
468 |
+
babel-runtime "^6.22.0"
|
469 |
+
babel-template "^6.24.1"
|
470 |
+
|
471 |
+
babel-plugin-transform-class-properties@^6.24.1:
|
472 |
+
version "6.24.1"
|
473 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
|
474 |
+
dependencies:
|
475 |
+
babel-helper-function-name "^6.24.1"
|
476 |
+
babel-plugin-syntax-class-properties "^6.8.0"
|
477 |
+
babel-runtime "^6.22.0"
|
478 |
+
babel-template "^6.24.1"
|
479 |
+
|
480 |
+
babel-plugin-transform-decorators@^6.24.1:
|
481 |
+
version "6.24.1"
|
482 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
|
483 |
+
dependencies:
|
484 |
+
babel-helper-explode-class "^6.24.1"
|
485 |
+
babel-plugin-syntax-decorators "^6.13.0"
|
486 |
+
babel-runtime "^6.22.0"
|
487 |
+
babel-template "^6.24.1"
|
488 |
+
babel-types "^6.24.1"
|
489 |
+
|
490 |
+
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
|
491 |
+
version "6.22.0"
|
492 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
|
493 |
+
dependencies:
|
494 |
+
babel-runtime "^6.22.0"
|
495 |
+
|
496 |
+
babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
|
497 |
+
version "6.22.0"
|
498 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
|
499 |
+
dependencies:
|
500 |
+
babel-runtime "^6.22.0"
|
501 |
+
|
502 |
+
babel-plugin-transform-es2015-block-scoping@^6.24.1:
|
503 |
+
version "6.26.0"
|
504 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
|
505 |
+
dependencies:
|
506 |
+
babel-runtime "^6.26.0"
|
507 |
+
babel-template "^6.26.0"
|
508 |
+
babel-traverse "^6.26.0"
|
509 |
+
babel-types "^6.26.0"
|
510 |
+
lodash "^4.17.4"
|
511 |
+
|
512 |
+
babel-plugin-transform-es2015-classes@^6.24.1:
|
513 |
+
version "6.24.1"
|
514 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
|
515 |
+
dependencies:
|
516 |
+
babel-helper-define-map "^6.24.1"
|
517 |
+
babel-helper-function-name "^6.24.1"
|
518 |
+
babel-helper-optimise-call-expression "^6.24.1"
|
519 |
+
babel-helper-replace-supers "^6.24.1"
|
520 |
+
babel-messages "^6.23.0"
|
521 |
+
babel-runtime "^6.22.0"
|
522 |
+
babel-template "^6.24.1"
|
523 |
+
babel-traverse "^6.24.1"
|
524 |
+
babel-types "^6.24.1"
|
525 |
+
|
526 |
+
babel-plugin-transform-es2015-computed-properties@^6.24.1:
|
527 |
+
version "6.24.1"
|
528 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
|
529 |
+
dependencies:
|
530 |
+
babel-runtime "^6.22.0"
|
531 |
+
babel-template "^6.24.1"
|
532 |
+
|
533 |
+
babel-plugin-transform-es2015-destructuring@^6.22.0:
|
534 |
+
version "6.23.0"
|
535 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
|
536 |
+
dependencies:
|
537 |
+
babel-runtime "^6.22.0"
|
538 |
+
|
539 |
+
babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
|
540 |
+
version "6.24.1"
|
541 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
|
542 |
+
dependencies:
|
543 |
+
babel-runtime "^6.22.0"
|
544 |
+
babel-types "^6.24.1"
|
545 |
+
|
546 |
+
babel-plugin-transform-es2015-for-of@^6.22.0:
|
547 |
+
version "6.23.0"
|
548 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
|
549 |
+
dependencies:
|
550 |
+
babel-runtime "^6.22.0"
|
551 |
+
|
552 |
+
babel-plugin-transform-es2015-function-name@^6.24.1:
|
553 |
+
version "6.24.1"
|
554 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
|
555 |
+
dependencies:
|
556 |
+
babel-helper-function-name "^6.24.1"
|
557 |
+
babel-runtime "^6.22.0"
|
558 |
+
babel-types "^6.24.1"
|
559 |
+
|
560 |
+
babel-plugin-transform-es2015-literals@^6.22.0:
|
561 |
+
version "6.22.0"
|
562 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
|
563 |
+
dependencies:
|
564 |
+
babel-runtime "^6.22.0"
|
565 |
+
|
566 |
+
babel-plugin-transform-es2015-modules-amd@^6.24.1:
|
567 |
+
version "6.24.1"
|
568 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
|
569 |
+
dependencies:
|
570 |
+
babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
|
571 |
+
babel-runtime "^6.22.0"
|
572 |
+
babel-template "^6.24.1"
|
573 |
+
|
574 |
+
babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
|
575 |
+
version "6.26.0"
|
576 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
|
577 |
+
dependencies:
|
578 |
+
babel-plugin-transform-strict-mode "^6.24.1"
|
579 |
+
babel-runtime "^6.26.0"
|
580 |
+
babel-template "^6.26.0"
|
581 |
+
babel-types "^6.26.0"
|
582 |
+
|
583 |
+
babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
|
584 |
+
version "6.24.1"
|
585 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
|
586 |
+
dependencies:
|
587 |
+
babel-helper-hoist-variables "^6.24.1"
|
588 |
+
babel-runtime "^6.22.0"
|
589 |
+
babel-template "^6.24.1"
|
590 |
+
|
591 |
+
babel-plugin-transform-es2015-modules-umd@^6.24.1:
|
592 |
+
version "6.24.1"
|
593 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
|
594 |
+
dependencies:
|
595 |
+
babel-plugin-transform-es2015-modules-amd "^6.24.1"
|
596 |
+
babel-runtime "^6.22.0"
|
597 |
+
babel-template "^6.24.1"
|
598 |
+
|
599 |
+
babel-plugin-transform-es2015-object-super@^6.24.1:
|
600 |
+
version "6.24.1"
|
601 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
|
602 |
+
dependencies:
|
603 |
+
babel-helper-replace-supers "^6.24.1"
|
604 |
+
babel-runtime "^6.22.0"
|
605 |
+
|
606 |
+
babel-plugin-transform-es2015-parameters@^6.24.1:
|
607 |
+
version "6.24.1"
|
608 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
|
609 |
+
dependencies:
|
610 |
+
babel-helper-call-delegate "^6.24.1"
|
611 |
+
babel-helper-get-function-arity "^6.24.1"
|
612 |
+
babel-runtime "^6.22.0"
|
613 |
+
babel-template "^6.24.1"
|
614 |
+
babel-traverse "^6.24.1"
|
615 |
+
babel-types "^6.24.1"
|
616 |
+
|
617 |
+
babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
|
618 |
+
version "6.24.1"
|
619 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
|
620 |
+
dependencies:
|
621 |
+
babel-runtime "^6.22.0"
|
622 |
+
babel-types "^6.24.1"
|
623 |
+
|
624 |
+
babel-plugin-transform-es2015-spread@^6.22.0:
|
625 |
+
version "6.22.0"
|
626 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
|
627 |
+
dependencies:
|
628 |
+
babel-runtime "^6.22.0"
|
629 |
+
|
630 |
+
babel-plugin-transform-es2015-sticky-regex@^6.24.1:
|
631 |
+
version "6.24.1"
|
632 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
|
633 |
+
dependencies:
|
634 |
+
babel-helper-regex "^6.24.1"
|
635 |
+
babel-runtime "^6.22.0"
|
636 |
+
babel-types "^6.24.1"
|
637 |
+
|
638 |
+
babel-plugin-transform-es2015-template-literals@^6.22.0:
|
639 |
+
version "6.22.0"
|
640 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
|
641 |
+
dependencies:
|
642 |
+
babel-runtime "^6.22.0"
|
643 |
+
|
644 |
+
babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
|
645 |
+
version "6.23.0"
|
646 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
|
647 |
+
dependencies:
|
648 |
+
babel-runtime "^6.22.0"
|
649 |
+
|
650 |
+
babel-plugin-transform-es2015-unicode-regex@^6.24.1:
|
651 |
+
version "6.24.1"
|
652 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
|
653 |
+
dependencies:
|
654 |
+
babel-helper-regex "^6.24.1"
|
655 |
+
babel-runtime "^6.22.0"
|
656 |
+
regexpu-core "^2.0.0"
|
657 |
+
|
658 |
+
babel-plugin-transform-exponentiation-operator@^6.24.1:
|
659 |
+
version "6.24.1"
|
660 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
|
661 |
+
dependencies:
|
662 |
+
babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
|
663 |
+
babel-plugin-syntax-exponentiation-operator "^6.8.0"
|
664 |
+
babel-runtime "^6.22.0"
|
665 |
+
|
666 |
+
babel-plugin-transform-export-extensions@^6.22.0:
|
667 |
+
version "6.22.0"
|
668 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653"
|
669 |
+
dependencies:
|
670 |
+
babel-plugin-syntax-export-extensions "^6.8.0"
|
671 |
+
babel-runtime "^6.22.0"
|
672 |
+
|
673 |
+
babel-plugin-transform-flow-strip-types@^6.8.0:
|
674 |
+
version "6.22.0"
|
675 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
|
676 |
+
dependencies:
|
677 |
+
babel-plugin-syntax-flow "^6.18.0"
|
678 |
+
babel-runtime "^6.22.0"
|
679 |
+
|
680 |
+
babel-plugin-transform-object-rest-spread@^6.22.0:
|
681 |
+
version "6.26.0"
|
682 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
|
683 |
+
dependencies:
|
684 |
+
babel-plugin-syntax-object-rest-spread "^6.8.0"
|
685 |
+
babel-runtime "^6.26.0"
|
686 |
+
|
687 |
+
babel-plugin-transform-regenerator@^6.24.1:
|
688 |
+
version "6.26.0"
|
689 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
|
690 |
+
dependencies:
|
691 |
+
regenerator-transform "^0.10.0"
|
692 |
+
|
693 |
+
babel-plugin-transform-strict-mode@^6.24.1:
|
694 |
+
version "6.24.1"
|
695 |
+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
|
696 |
+
dependencies:
|
697 |
+
babel-runtime "^6.22.0"
|
698 |
+
babel-types "^6.24.1"
|
699 |
+
|
700 |
+
babel-preset-es2015@^6.9.0:
|
701 |
+
version "6.24.1"
|
702 |
+
resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
|
703 |
+
dependencies:
|
704 |
+
babel-plugin-check-es2015-constants "^6.22.0"
|
705 |
+
babel-plugin-transform-es2015-arrow-functions "^6.22.0"
|
706 |
+
babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
|
707 |
+
babel-plugin-transform-es2015-block-scoping "^6.24.1"
|
708 |
+
babel-plugin-transform-es2015-classes "^6.24.1"
|
709 |
+
babel-plugin-transform-es2015-computed-properties "^6.24.1"
|
710 |
+
babel-plugin-transform-es2015-destructuring "^6.22.0"
|
711 |
+
babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
|
712 |
+
babel-plugin-transform-es2015-for-of "^6.22.0"
|
713 |
+
babel-plugin-transform-es2015-function-name "^6.24.1"
|
714 |
+
babel-plugin-transform-es2015-literals "^6.22.0"
|
715 |
+
babel-plugin-transform-es2015-modules-amd "^6.24.1"
|
716 |
+
babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
|
717 |
+
babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
|
718 |
+
babel-plugin-transform-es2015-modules-umd "^6.24.1"
|
719 |
+
babel-plugin-transform-es2015-object-super "^6.24.1"
|
720 |
+
babel-plugin-transform-es2015-parameters "^6.24.1"
|
721 |
+
babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
|
722 |
+
babel-plugin-transform-es2015-spread "^6.22.0"
|
723 |
+
babel-plugin-transform-es2015-sticky-regex "^6.24.1"
|
724 |
+
babel-plugin-transform-es2015-template-literals "^6.22.0"
|
725 |
+
babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
|
726 |
+
babel-plugin-transform-es2015-unicode-regex "^6.24.1"
|
727 |
+
babel-plugin-transform-regenerator "^6.24.1"
|
728 |
+
|
729 |
+
babel-preset-stage-1@^6.5.0:
|
730 |
+
version "6.24.1"
|
731 |
+
resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0"
|
732 |
+
dependencies:
|
733 |
+
babel-plugin-transform-class-constructor-call "^6.24.1"
|
734 |
+
babel-plugin-transform-export-extensions "^6.22.0"
|
735 |
+
babel-preset-stage-2 "^6.24.1"
|
736 |
+
|
737 |
+
babel-preset-stage-2@^6.24.1:
|
738 |
+
version "6.24.1"
|
739 |
+
resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
|
740 |
+
dependencies:
|
741 |
+
babel-plugin-syntax-dynamic-import "^6.18.0"
|
742 |
+
babel-plugin-transform-class-properties "^6.24.1"
|
743 |
+
babel-plugin-transform-decorators "^6.24.1"
|
744 |
+
babel-preset-stage-3 "^6.24.1"
|
745 |
+
|
746 |
+
babel-preset-stage-3@^6.24.1:
|
747 |
+
version "6.24.1"
|
748 |
+
resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
|
749 |
+
dependencies:
|
750 |
+
babel-plugin-syntax-trailing-function-commas "^6.22.0"
|
751 |
+
babel-plugin-transform-async-generator-functions "^6.24.1"
|
752 |
+
babel-plugin-transform-async-to-generator "^6.24.1"
|
753 |
+
babel-plugin-transform-exponentiation-operator "^6.24.1"
|
754 |
+
babel-plugin-transform-object-rest-spread "^6.22.0"
|
755 |
+
|
756 |
+
babel-register@^6.26.0, babel-register@^6.9.0:
|
757 |
+
version "6.26.0"
|
758 |
+
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
|
759 |
+
dependencies:
|
760 |
+
babel-core "^6.26.0"
|
761 |
+
babel-runtime "^6.26.0"
|
762 |
+
core-js "^2.5.0"
|
763 |
+
home-or-tmp "^2.0.0"
|
764 |
+
lodash "^4.17.4"
|
765 |
+
mkdirp "^0.5.1"
|
766 |
+
source-map-support "^0.4.15"
|
767 |
+
|
768 |
+
babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
|
769 |
+
version "6.26.0"
|
770 |
+
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
|
771 |
+
dependencies:
|
772 |
+
core-js "^2.4.0"
|
773 |
+
regenerator-runtime "^0.11.0"
|
774 |
+
|
775 |
+
babel-template@^6.24.1, babel-template@^6.26.0:
|
776 |
+
version "6.26.0"
|
777 |
+
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
|
778 |
+
dependencies:
|
779 |
+
babel-runtime "^6.26.0"
|
780 |
+
babel-traverse "^6.26.0"
|
781 |
+
babel-types "^6.26.0"
|
782 |
+
babylon "^6.18.0"
|
783 |
+
lodash "^4.17.4"
|
784 |
+
|
785 |
+
babel-traverse@^6.24.1, babel-traverse@^6.26.0:
|
786 |
+
version "6.26.0"
|
787 |
+
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
|
788 |
+
dependencies:
|
789 |
+
babel-code-frame "^6.26.0"
|
790 |
+
babel-messages "^6.23.0"
|
791 |
+
babel-runtime "^6.26.0"
|
792 |
+
babel-types "^6.26.0"
|
793 |
+
babylon "^6.18.0"
|
794 |
+
debug "^2.6.8"
|
795 |
+
globals "^9.18.0"
|
796 |
+
invariant "^2.2.2"
|
797 |
+
lodash "^4.17.4"
|
798 |
+
|
799 |
+
babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
|
800 |
+
version "6.26.0"
|
801 |
+
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
|
802 |
+
dependencies:
|
803 |
+
babel-runtime "^6.26.0"
|
804 |
+
esutils "^2.0.2"
|
805 |
+
lodash "^4.17.4"
|
806 |
+
to-fast-properties "^1.0.3"
|
807 |
+
|
808 |
+
babylon@^6.17.3, babylon@^6.18.0:
|
809 |
+
version "6.18.0"
|
810 |
+
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
|
811 |
+
|
812 |
+
babylon@^7.0.0-beta.30:
|
813 |
+
version "7.0.0-beta.44"
|
814 |
+
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
|
815 |
+
|
816 |
+
balanced-match@^0.4.2:
|
817 |
+
version "0.4.2"
|
818 |
+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
|
819 |
+
|
820 |
+
balanced-match@^1.0.0:
|
821 |
+
version "1.0.0"
|
822 |
+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
823 |
+
|
824 |
+
base64-js@^1.0.2:
|
825 |
+
version "1.2.3"
|
826 |
+
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801"
|
827 |
+
|
828 |
+
base@^0.11.1:
|
829 |
+
version "0.11.2"
|
830 |
+
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
831 |
+
dependencies:
|
832 |
+
cache-base "^1.0.1"
|
833 |
+
class-utils "^0.3.5"
|
834 |
+
component-emitter "^1.2.1"
|
835 |
+
define-property "^1.0.0"
|
836 |
+
isobject "^3.0.1"
|
837 |
+
mixin-deep "^1.2.0"
|
838 |
+
pascalcase "^0.1.1"
|
839 |
+
|
840 |
+
bcrypt-pbkdf@^1.0.0:
|
841 |
+
version "1.0.1"
|
842 |
+
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
|
843 |
+
dependencies:
|
844 |
+
tweetnacl "^0.14.3"
|
845 |
+
|
846 |
+
big.js@^3.1.3:
|
847 |
+
version "3.2.0"
|
848 |
+
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
|
849 |
+
|
850 |
+
binary-extensions@^1.0.0:
|
851 |
+
version "1.11.0"
|
852 |
+
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
|
853 |
+
|
854 |
+
binaryextensions@2:
|
855 |
+
version "2.1.1"
|
856 |
+
resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935"
|
857 |
+
|
858 |
+
block-stream@*:
|
859 |
+
version "0.0.9"
|
860 |
+
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
861 |
+
dependencies:
|
862 |
+
inherits "~2.0.0"
|
863 |
+
|
864 |
+
bluebird@^3.5.1:
|
865 |
+
version "3.5.1"
|
866 |
+
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
867 |
+
|
868 |
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
|
869 |
+
version "4.11.8"
|
870 |
+
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
|
871 |
+
|
872 |
+
boom@2.x.x:
|
873 |
+
version "2.10.1"
|
874 |
+
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
|
875 |
+
dependencies:
|
876 |
+
hoek "2.x.x"
|
877 |
+
|
878 |
+
brace-expansion@^1.1.7:
|
879 |
+
version "1.1.11"
|
880 |
+
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
881 |
+
dependencies:
|
882 |
+
balanced-match "^1.0.0"
|
883 |
+
concat-map "0.0.1"
|
884 |
+
|
885 |
+
braces@^1.8.2:
|
886 |
+
version "1.8.5"
|
887 |
+
resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
|
888 |
+
dependencies:
|
889 |
+
expand-range "^1.8.1"
|
890 |
+
preserve "^0.2.0"
|
891 |
+
repeat-element "^1.1.2"
|
892 |
+
|
893 |
+
braces@^2.3.0, braces@^2.3.1:
|
894 |
+
version "2.3.2"
|
895 |
+
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
|
896 |
+
dependencies:
|
897 |
+
arr-flatten "^1.1.0"
|
898 |
+
array-unique "^0.3.2"
|
899 |
+
extend-shallow "^2.0.1"
|
900 |
+
fill-range "^4.0.0"
|
901 |
+
isobject "^3.0.1"
|
902 |
+
repeat-element "^1.1.2"
|
903 |
+
snapdragon "^0.8.1"
|
904 |
+
snapdragon-node "^2.0.1"
|
905 |
+
split-string "^3.0.2"
|
906 |
+
to-regex "^3.0.1"
|
907 |
+
|
908 |
+
brorand@^1.0.1:
|
909 |
+
version "1.1.0"
|
910 |
+
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
911 |
+
|
912 |
+
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
913 |
+
version "1.2.0"
|
914 |
+
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
|
915 |
+
dependencies:
|
916 |
+
buffer-xor "^1.0.3"
|
917 |
+
cipher-base "^1.0.0"
|
918 |
+
create-hash "^1.1.0"
|
919 |
+
evp_bytestokey "^1.0.3"
|
920 |
+
inherits "^2.0.1"
|
921 |
+
safe-buffer "^5.0.1"
|
922 |
+
|
923 |
+
browserify-cipher@^1.0.0:
|
924 |
+
version "1.0.1"
|
925 |
+
resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
|
926 |
+
dependencies:
|
927 |
+
browserify-aes "^1.0.4"
|
928 |
+
browserify-des "^1.0.0"
|
929 |
+
evp_bytestokey "^1.0.0"
|
930 |
+
|
931 |
+
browserify-des@^1.0.0:
|
932 |
+
version "1.0.1"
|
933 |
+
resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c"
|
934 |
+
dependencies:
|
935 |
+
cipher-base "^1.0.1"
|
936 |
+
des.js "^1.0.0"
|
937 |
+
inherits "^2.0.1"
|
938 |
+
|
939 |
+
browserify-rsa@^4.0.0:
|
940 |
+
version "4.0.1"
|
941 |
+
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
|
942 |
+
dependencies:
|
943 |
+
bn.js "^4.1.0"
|
944 |
+
randombytes "^2.0.1"
|
945 |
+
|
946 |
+
browserify-sign@^4.0.0:
|
947 |
+
version "4.0.4"
|
948 |
+
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
|
949 |
+
dependencies:
|
950 |
+
bn.js "^4.1.1"
|
951 |
+
browserify-rsa "^4.0.0"
|
952 |
+
create-hash "^1.1.0"
|
953 |
+
create-hmac "^1.1.2"
|
954 |
+
elliptic "^6.0.0"
|
955 |
+
inherits "^2.0.1"
|
956 |
+
parse-asn1 "^5.0.0"
|
957 |
+
|
958 |
+
browserify-zlib@^0.2.0:
|
959 |
+
version "0.2.0"
|
960 |
+
resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
|
961 |
+
dependencies:
|
962 |
+
pako "~1.0.5"
|
963 |
+
|
964 |
+
browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
|
965 |
+
version "1.7.7"
|
966 |
+
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
|
967 |
+
dependencies:
|
968 |
+
caniuse-db "^1.0.30000639"
|
969 |
+
electron-to-chromium "^1.2.7"
|
970 |
+
|
971 |
+
buffer-from@^1.0.0:
|
972 |
+
version "1.0.0"
|
973 |
+
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
|
974 |
+
|
975 |
+
buffer-xor@^1.0.3:
|
976 |
+
version "1.0.3"
|
977 |
+
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
|
978 |
+
|
979 |
+
buffer@^4.3.0:
|
980 |
+
version "4.9.1"
|
981 |
+
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
|
982 |
+
dependencies:
|
983 |
+
base64-js "^1.0.2"
|
984 |
+
ieee754 "^1.1.4"
|
985 |
+
isarray "^1.0.0"
|
986 |
+
|
987 |
+
builtin-modules@^1.0.0:
|
988 |
+
version "1.1.1"
|
989 |
+
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
990 |
+
|
991 |
+
builtin-status-codes@^3.0.0:
|
992 |
+
version "3.0.0"
|
993 |
+
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
994 |
+
|
995 |
+
cacache@^10.0.4:
|
996 |
+
version "10.0.4"
|
997 |
+
resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
|
998 |
+
dependencies:
|
999 |
+
bluebird "^3.5.1"
|
1000 |
+
chownr "^1.0.1"
|
1001 |
+
glob "^7.1.2"
|
1002 |
+
graceful-fs "^4.1.11"
|
1003 |
+
lru-cache "^4.1.1"
|
1004 |
+
mississippi "^2.0.0"
|
1005 |
+
mkdirp "^0.5.1"
|
1006 |
+
move-concurrently "^1.0.1"
|
1007 |
+
promise-inflight "^1.0.1"
|
1008 |
+
rimraf "^2.6.2"
|
1009 |
+
ssri "^5.2.4"
|
1010 |
+
unique-filename "^1.1.0"
|
1011 |
+
y18n "^4.0.0"
|
1012 |
+
|
1013 |
+
cache-base@^1.0.1:
|
1014 |
+
version "1.0.1"
|
1015 |
+
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
1016 |
+
dependencies:
|
1017 |
+
collection-visit "^1.0.0"
|
1018 |
+
component-emitter "^1.2.1"
|
1019 |
+
get-value "^2.0.6"
|
1020 |
+
has-value "^1.0.0"
|
1021 |
+
isobject "^3.0.1"
|
1022 |
+
set-value "^2.0.0"
|
1023 |
+
to-object-path "^0.3.0"
|
1024 |
+
union-value "^1.0.0"
|
1025 |
+
unset-value "^1.0.0"
|
1026 |
+
|
1027 |
+
cacheable-request@^2.1.1:
|
1028 |
+
version "2.1.4"
|
1029 |
+
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d"
|
1030 |
+
dependencies:
|
1031 |
+
clone-response "1.0.2"
|
1032 |
+
get-stream "3.0.0"
|
1033 |
+
http-cache-semantics "3.8.1"
|
1034 |
+
keyv "3.0.0"
|
1035 |
+
lowercase-keys "1.0.0"
|
1036 |
+
normalize-url "2.0.1"
|
1037 |
+
responselike "1.0.2"
|
1038 |
+
|
1039 |
+
camelcase-css@^1.0.1:
|
1040 |
+
version "1.0.1"
|
1041 |
+
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705"
|
1042 |
+
|
1043 |
+
camelcase@^4.1.0:
|
1044 |
+
version "4.1.0"
|
1045 |
+
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
1046 |
+
|
1047 |
+
caniuse-api@^1.5.2:
|
1048 |
+
version "1.6.1"
|
1049 |
+
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
|
1050 |
+
dependencies:
|
1051 |
+
browserslist "^1.3.6"
|
1052 |
+
caniuse-db "^1.0.30000529"
|
1053 |
+
lodash.memoize "^4.1.2"
|
1054 |
+
lodash.uniq "^4.5.0"
|
1055 |
+
|
1056 |
+
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
|
1057 |
+
version "1.0.30000830"
|
1058 |
+
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000830.tgz#6e45255b345649fd15ff59072da1e12bb3de2f13"
|
1059 |
+
|
1060 |
+
caseless@~0.12.0:
|
1061 |
+
version "0.12.0"
|
1062 |
+
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
1063 |
+
|
1064 |
+
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
|
1065 |
+
version "1.1.3"
|
1066 |
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
1067 |
+
dependencies:
|
1068 |
+
ansi-styles "^2.2.1"
|
1069 |
+
escape-string-regexp "^1.0.2"
|
1070 |
+
has-ansi "^2.0.0"
|
1071 |
+
strip-ansi "^3.0.0"
|
1072 |
+
supports-color "^2.0.0"
|
1073 |
+
|
1074 |
+
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2:
|
1075 |
+
version "2.3.2"
|
1076 |
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
|
1077 |
+
dependencies:
|
1078 |
+
ansi-styles "^3.2.1"
|
1079 |
+
escape-string-regexp "^1.0.5"
|
1080 |
+
supports-color "^5.3.0"
|
1081 |
+
|
1082 |
+
chalk@~0.4.0:
|
1083 |
+
version "0.4.0"
|
1084 |
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
|
1085 |
+
dependencies:
|
1086 |
+
ansi-styles "~1.0.0"
|
1087 |
+
has-color "~0.1.0"
|
1088 |
+
strip-ansi "~0.1.0"
|
1089 |
+
|
1090 |
+
chardet@^0.4.0:
|
1091 |
+
version "0.4.2"
|
1092 |
+
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
|
1093 |
+
|
1094 |
+
chokidar@^2.0.2:
|
1095 |
+
version "2.0.3"
|
1096 |
+
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176"
|
1097 |
+
dependencies:
|
1098 |
+
anymatch "^2.0.0"
|
1099 |
+
async-each "^1.0.0"
|
1100 |
+
braces "^2.3.0"
|
1101 |
+
glob-parent "^3.1.0"
|
1102 |
+
inherits "^2.0.1"
|
1103 |
+
is-binary-path "^1.0.0"
|
1104 |
+
is-glob "^4.0.0"
|
1105 |
+
normalize-path "^2.1.1"
|
1106 |
+
path-is-absolute "^1.0.0"
|
1107 |
+
readdirp "^2.0.0"
|
1108 |
+
upath "^1.0.0"
|
1109 |
+
optionalDependencies:
|
1110 |
+
fsevents "^1.1.2"
|
1111 |
+
|
1112 |
+
chownr@^1.0.1:
|
1113 |
+
version "1.0.1"
|
1114 |
+
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
|
1115 |
+
|
1116 |
+
chrome-trace-event@^0.1.1:
|
1117 |
+
version "0.1.3"
|
1118 |
+
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz#d395af2d31c87b90a716c831fe326f69768ec084"
|
1119 |
+
|
1120 |
+
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
1121 |
+
version "1.0.4"
|
1122 |
+
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
|
1123 |
+
dependencies:
|
1124 |
+
inherits "^2.0.1"
|
1125 |
+
safe-buffer "^5.0.1"
|
1126 |
+
|
1127 |
+
clap@^1.0.9:
|
1128 |
+
version "1.2.3"
|
1129 |
+
resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
|
1130 |
+
dependencies:
|
1131 |
+
chalk "^1.1.3"
|
1132 |
+
|
1133 |
+
class-utils@^0.3.5:
|
1134 |
+
version "0.3.6"
|
1135 |
+
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
|
1136 |
+
dependencies:
|
1137 |
+
arr-union "^3.1.0"
|
1138 |
+
define-property "^0.2.5"
|
1139 |
+
isobject "^3.0.0"
|
1140 |
+
static-extend "^0.1.1"
|
1141 |
+
|
1142 |
+
cli-cursor@^1.0.2:
|
1143 |
+
version "1.0.2"
|
1144 |
+
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
|
1145 |
+
dependencies:
|
1146 |
+
restore-cursor "^1.0.1"
|
1147 |
+
|
1148 |
+
cli-cursor@^2.1.0:
|
1149 |
+
version "2.1.0"
|
1150 |
+
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
1151 |
+
dependencies:
|
1152 |
+
restore-cursor "^2.0.0"
|
1153 |
+
|
1154 |
+
cli-spinners@^0.1.2:
|
1155 |
+
version "0.1.2"
|
1156 |
+
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
|
1157 |
+
|
1158 |
+
cli-table@^0.3.1:
|
1159 |
+
version "0.3.1"
|
1160 |
+
resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
|
1161 |
+
dependencies:
|
1162 |
+
colors "1.0.3"
|
1163 |
+
|
1164 |
+
cli-truncate@^0.2.1:
|
1165 |
+
version "0.2.1"
|
1166 |
+
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
|
1167 |
+
dependencies:
|
1168 |
+
slice-ansi "0.0.4"
|
1169 |
+
string-width "^1.0.1"
|
1170 |
+
|
1171 |
+
cli-width@^2.0.0:
|
1172 |
+
version "2.2.0"
|
1173 |
+
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
1174 |
+
|
1175 |
+
cliui@^4.0.0:
|
1176 |
+
version "4.0.0"
|
1177 |
+
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
|
1178 |
+
dependencies:
|
1179 |
+
string-width "^2.1.1"
|
1180 |
+
strip-ansi "^4.0.0"
|
1181 |
+
wrap-ansi "^2.0.0"
|
1182 |
+
|
1183 |
+
clone-buffer@^1.0.0:
|
1184 |
+
version "1.0.0"
|
1185 |
+
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
|
1186 |
+
|
1187 |
+
clone-response@1.0.2:
|
1188 |
+
version "1.0.2"
|
1189 |
+
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
|
1190 |
+
dependencies:
|
1191 |
+
mimic-response "^1.0.0"
|
1192 |
+
|
1193 |
+
clone-stats@^0.0.1:
|
1194 |
+
version "0.0.1"
|
1195 |
+
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
|
1196 |
+
|
1197 |
+
clone-stats@^1.0.0:
|
1198 |
+
version "1.0.0"
|
1199 |
+
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
|
1200 |
+
|
1201 |
+
clone@^1.0.0, clone@^1.0.2:
|
1202 |
+
version "1.0.4"
|
1203 |
+
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
1204 |
+
|
1205 |
+
clone@^2.1.1:
|
1206 |
+
version "2.1.2"
|
1207 |
+
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
1208 |
+
|
1209 |
+
cloneable-readable@^1.0.0:
|
1210 |
+
version "1.1.2"
|
1211 |
+
resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65"
|
1212 |
+
dependencies:
|
1213 |
+
inherits "^2.0.1"
|
1214 |
+
process-nextick-args "^2.0.0"
|
1215 |
+
readable-stream "^2.3.5"
|
1216 |
+
|
1217 |
+
co@^4.6.0:
|
1218 |
+
version "4.6.0"
|
1219 |
+
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
1220 |
+
|
1221 |
+
coa@~1.0.1:
|
1222 |
+
version "1.0.4"
|
1223 |
+
resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
|
1224 |
+
dependencies:
|
1225 |
+
q "^1.1.2"
|
1226 |
+
|
1227 |
+
code-point-at@^1.0.0:
|
1228 |
+
version "1.1.0"
|
1229 |
+
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
1230 |
+
|
1231 |
+
collection-visit@^1.0.0:
|
1232 |
+
version "1.0.0"
|
1233 |
+
resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
|
1234 |
+
dependencies:
|
1235 |
+
map-visit "^1.0.0"
|
1236 |
+
object-visit "^1.0.0"
|
1237 |
+
|
1238 |
+
color-convert@^1.3.0, color-convert@^1.9.0:
|
1239 |
+
version "1.9.1"
|
1240 |
+
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
|
1241 |
+
dependencies:
|
1242 |
+
color-name "^1.1.1"
|
1243 |
+
|
1244 |
+
color-name@^1.0.0, color-name@^1.1.1:
|
1245 |
+
version "1.1.3"
|
1246 |
+
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
1247 |
+
|
1248 |
+
color-string@^0.3.0:
|
1249 |
+
version "0.3.0"
|
1250 |
+
resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
|
1251 |
+
dependencies:
|
1252 |
+
color-name "^1.0.0"
|
1253 |
+
|
1254 |
+
color@^0.11.0:
|
1255 |
+
version "0.11.4"
|
1256 |
+
resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
|
1257 |
+
dependencies:
|
1258 |
+
clone "^1.0.2"
|
1259 |
+
color-convert "^1.3.0"
|
1260 |
+
color-string "^0.3.0"
|
1261 |
+
|
1262 |
+
colormin@^1.0.5:
|
1263 |
+
version "1.1.2"
|
1264 |
+
resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
|
1265 |
+
dependencies:
|
1266 |
+
color "^0.11.0"
|
1267 |
+
css-color-names "0.0.4"
|
1268 |
+
has "^1.0.1"
|
1269 |
+
|
1270 |
+
colors@1.0.3:
|
1271 |
+
version "1.0.3"
|
1272 |
+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
1273 |
+
|
1274 |
+
colors@^1.1.2:
|
1275 |
+
version "1.2.1"
|
1276 |
+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794"
|
1277 |
+
|
1278 |
+
colors@~1.1.2:
|
1279 |
+
version "1.1.2"
|
1280 |
+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
|
1281 |
+
|
1282 |
+
combined-stream@^1.0.5, combined-stream@~1.0.5:
|
1283 |
+
version "1.0.6"
|
1284 |
+
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
|
1285 |
+
dependencies:
|
1286 |
+
delayed-stream "~1.0.0"
|
1287 |
+
|
1288 |
+
commander@^2.11.0:
|
1289 |
+
version "2.15.1"
|
1290 |
+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
1291 |
+
|
1292 |
+
commander@~2.13.0:
|
1293 |
+
version "2.13.0"
|
1294 |
+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
|
1295 |
+
|
1296 |
+
comment-regex@^1.0.0:
|
1297 |
+
version "1.0.1"
|
1298 |
+
resolved "https://registry.yarnpkg.com/comment-regex/-/comment-regex-1.0.1.tgz#e070d2c4db33231955d0979d27c918fcb6f93565"
|
1299 |
+
|
1300 |
+
commondir@^1.0.1:
|
1301 |
+
version "1.0.1"
|
1302 |
+
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
1303 |
+
|
1304 |
+
component-emitter@^1.2.1:
|
1305 |
+
version "1.2.1"
|
1306 |
+
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
|
1307 |
+
|
1308 |
+
concat-map@0.0.1:
|
1309 |
+
version "0.0.1"
|
1310 |
+
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
1311 |
+
|
1312 |
+
concat-stream@^1.5.0:
|
1313 |
+
version "1.6.2"
|
1314 |
+
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
|
1315 |
+
dependencies:
|
1316 |
+
buffer-from "^1.0.0"
|
1317 |
+
inherits "^2.0.3"
|
1318 |
+
readable-stream "^2.2.2"
|
1319 |
+
typedarray "^0.0.6"
|
1320 |
+
|
1321 |
+
console-browserify@^1.1.0:
|
1322 |
+
version "1.1.0"
|
1323 |
+
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
|
1324 |
+
dependencies:
|
1325 |
+
date-now "^0.1.4"
|
1326 |
+
|
1327 |
+
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
1328 |
+
version "1.1.0"
|
1329 |
+
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
1330 |
+
|
1331 |
+
constants-browserify@^1.0.0:
|
1332 |
+
version "1.0.0"
|
1333 |
+
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
1334 |
+
|
1335 |
+
convert-source-map@^1.5.0:
|
1336 |
+
version "1.5.1"
|
1337 |
+
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
|
1338 |
+
|
1339 |
+
copy-concurrently@^1.0.0:
|
1340 |
+
version "1.0.5"
|
1341 |
+
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
|
1342 |
+
dependencies:
|
1343 |
+
aproba "^1.1.1"
|
1344 |
+
fs-write-stream-atomic "^1.0.8"
|
1345 |
+
iferr "^0.1.5"
|
1346 |
+
mkdirp "^0.5.1"
|
1347 |
+
rimraf "^2.5.4"
|
1348 |
+
run-queue "^1.0.0"
|
1349 |
+
|
1350 |
+
copy-descriptor@^0.1.0:
|
1351 |
+
version "0.1.1"
|
1352 |
+
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
1353 |
+
|
1354 |
+
core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0:
|
1355 |
+
version "2.5.5"
|
1356 |
+
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b"
|
1357 |
+
|
1358 |
+
core-util-is@1.0.2, core-util-is@~1.0.0:
|
1359 |
+
version "1.0.2"
|
1360 |
+
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
1361 |
+
|
1362 |
+
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
|
1363 |
+
version "2.2.2"
|
1364 |
+
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
|
1365 |
+
dependencies:
|
1366 |
+
is-directory "^0.3.1"
|
1367 |
+
js-yaml "^3.4.3"
|
1368 |
+
minimist "^1.2.0"
|
1369 |
+
object-assign "^4.1.0"
|
1370 |
+
os-homedir "^1.0.1"
|
1371 |
+
parse-json "^2.2.0"
|
1372 |
+
require-from-string "^1.1.0"
|
1373 |
+
|
1374 |
+
create-ecdh@^4.0.0:
|
1375 |
+
version "4.0.1"
|
1376 |
+
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.1.tgz#44223dfed533193ba5ba54e0df5709b89acf1f82"
|
1377 |
+
dependencies:
|
1378 |
+
bn.js "^4.1.0"
|
1379 |
+
elliptic "^6.0.0"
|
1380 |
+
|
1381 |
+
create-hash@^1.1.0, create-hash@^1.1.2:
|
1382 |
+
version "1.2.0"
|
1383 |
+
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
1384 |
+
dependencies:
|
1385 |
+
cipher-base "^1.0.1"
|
1386 |
+
inherits "^2.0.1"
|
1387 |
+
md5.js "^1.3.4"
|
1388 |
+
ripemd160 "^2.0.1"
|
1389 |
+
sha.js "^2.4.0"
|
1390 |
+
|
1391 |
+
create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
1392 |
+
version "1.1.7"
|
1393 |
+
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
1394 |
+
dependencies:
|
1395 |
+
cipher-base "^1.0.3"
|
1396 |
+
create-hash "^1.1.0"
|
1397 |
+
inherits "^2.0.1"
|
1398 |
+
ripemd160 "^2.0.0"
|
1399 |
+
safe-buffer "^5.0.1"
|
1400 |
+
sha.js "^2.4.8"
|
1401 |
+
|
1402 |
+
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
|
1403 |
+
version "5.1.0"
|
1404 |
+
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
1405 |
+
dependencies:
|
1406 |
+
lru-cache "^4.0.1"
|
1407 |
+
shebang-command "^1.2.0"
|
1408 |
+
which "^1.2.9"
|
1409 |
+
|
1410 |
+
cross-spawn@^6.0.5:
|
1411 |
+
version "6.0.5"
|
1412 |
+
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
1413 |
+
dependencies:
|
1414 |
+
nice-try "^1.0.4"
|
1415 |
+
path-key "^2.0.1"
|
1416 |
+
semver "^5.5.0"
|
1417 |
+
shebang-command "^1.2.0"
|
1418 |
+
which "^1.2.9"
|
1419 |
+
|
1420 |
+
cryptiles@2.x.x:
|
1421 |
+
version "2.0.5"
|
1422 |
+
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
|
1423 |
+
dependencies:
|
1424 |
+
boom "2.x.x"
|
1425 |
+
|
1426 |
+
crypto-browserify@^3.11.0:
|
1427 |
+
version "3.12.0"
|
1428 |
+
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
|
1429 |
+
dependencies:
|
1430 |
+
browserify-cipher "^1.0.0"
|
1431 |
+
browserify-sign "^4.0.0"
|
1432 |
+
create-ecdh "^4.0.0"
|
1433 |
+
create-hash "^1.1.0"
|
1434 |
+
create-hmac "^1.1.0"
|
1435 |
+
diffie-hellman "^5.0.0"
|
1436 |
+
inherits "^2.0.1"
|
1437 |
+
pbkdf2 "^3.0.3"
|
1438 |
+
public-encrypt "^4.0.0"
|
1439 |
+
randombytes "^2.0.0"
|
1440 |
+
randomfill "^1.0.3"
|
1441 |
+
|
1442 |
+
css-color-names@0.0.4:
|
1443 |
+
version "0.0.4"
|
1444 |
+
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
|
1445 |
+
|
1446 |
+
css-loader@^0.28.11:
|
1447 |
+
version "0.28.11"
|
1448 |
+
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
|
1449 |
+
dependencies:
|
1450 |
+
babel-code-frame "^6.26.0"
|
1451 |
+
css-selector-tokenizer "^0.7.0"
|
1452 |
+
cssnano "^3.10.0"
|
1453 |
+
icss-utils "^2.1.0"
|
1454 |
+
loader-utils "^1.0.2"
|
1455 |
+
lodash.camelcase "^4.3.0"
|
1456 |
+
object-assign "^4.1.1"
|
1457 |
+
postcss "^5.0.6"
|
1458 |
+
postcss-modules-extract-imports "^1.2.0"
|
1459 |
+
postcss-modules-local-by-default "^1.2.0"
|
1460 |
+
postcss-modules-scope "^1.1.0"
|
1461 |
+
postcss-modules-values "^1.3.0"
|
1462 |
+
postcss-value-parser "^3.3.0"
|
1463 |
+
source-list-map "^2.0.0"
|
1464 |
+
|
1465 |
+
css-selector-tokenizer@^0.7.0:
|
1466 |
+
version "0.7.0"
|
1467 |
+
resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
|
1468 |
+
dependencies:
|
1469 |
+
cssesc "^0.1.0"
|
1470 |
+
fastparse "^1.1.1"
|
1471 |
+
regexpu-core "^1.0.0"
|
1472 |
+
|
1473 |
+
css-tree@1.0.0-alpha25:
|
1474 |
+
version "1.0.0-alpha25"
|
1475 |
+
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha25.tgz#1bbfabfbf6eeef4f01d9108ff2edd0be2fe35597"
|
1476 |
+
dependencies:
|
1477 |
+
mdn-data "^1.0.0"
|
1478 |
+
source-map "^0.5.3"
|
1479 |
+
|
1480 |
+
cssesc@^0.1.0:
|
1481 |
+
version "0.1.0"
|
1482 |
+
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
|
1483 |
+
|
1484 |
+
cssnano@^3.10.0, cssnano@^3.4.0:
|
1485 |
+
version "3.10.0"
|
1486 |
+
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
|
1487 |
+
dependencies:
|
1488 |
+
autoprefixer "^6.3.1"
|
1489 |
+
decamelize "^1.1.2"
|
1490 |
+
defined "^1.0.0"
|
1491 |
+
has "^1.0.1"
|
1492 |
+
object-assign "^4.0.1"
|
1493 |
+
postcss "^5.0.14"
|
1494 |
+
postcss-calc "^5.2.0"
|
1495 |
+
postcss-colormin "^2.1.8"
|
1496 |
+
postcss-convert-values "^2.3.4"
|
1497 |
+
postcss-discard-comments "^2.0.4"
|
1498 |
+
postcss-discard-duplicates "^2.0.1"
|
1499 |
+
postcss-discard-empty "^2.0.1"
|
1500 |
+
postcss-discard-overridden "^0.1.1"
|
1501 |
+
postcss-discard-unused "^2.2.1"
|
1502 |
+
postcss-filter-plugins "^2.0.0"
|
1503 |
+
postcss-merge-idents "^2.1.5"
|
1504 |
+
postcss-merge-longhand "^2.0.1"
|
1505 |
+
postcss-merge-rules "^2.0.3"
|
1506 |
+
postcss-minify-font-values "^1.0.2"
|
1507 |
+
postcss-minify-gradients "^1.0.1"
|
1508 |
+
postcss-minify-params "^1.0.4"
|
1509 |
+
postcss-minify-selectors "^2.0.4"
|
1510 |
+
postcss-normalize-charset "^1.1.0"
|
1511 |
+
postcss-normalize-url "^3.0.7"
|
1512 |
+
postcss-ordered-values "^2.1.0"
|
1513 |
+
postcss-reduce-idents "^2.2.2"
|
1514 |
+
postcss-reduce-initial "^1.0.0"
|
1515 |
+
postcss-reduce-transforms "^1.0.3"
|
1516 |
+
postcss-svgo "^2.1.1"
|
1517 |
+
postcss-unique-selectors "^2.0.2"
|
1518 |
+
postcss-value-parser "^3.2.3"
|
1519 |
+
postcss-zindex "^2.0.1"
|
1520 |
+
|
1521 |
+
csso@~2.3.1:
|
1522 |
+
version "2.3.2"
|
1523 |
+
resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
|
1524 |
+
dependencies:
|
1525 |
+
clap "^1.0.9"
|
1526 |
+
source-map "^0.5.3"
|
1527 |
+
|
1528 |
+
csso@~3.3.0:
|
1529 |
+
version "3.3.1"
|
1530 |
+
resolved "https://registry.yarnpkg.com/csso/-/csso-3.3.1.tgz#e069a8f52adcf53685a8a7374256ccbc22c6ce3e"
|
1531 |
+
dependencies:
|
1532 |
+
css-tree "1.0.0-alpha25"
|
1533 |
+
|
1534 |
+
cyclist@~0.2.2:
|
1535 |
+
version "0.2.2"
|
1536 |
+
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
|
1537 |
+
|
1538 |
+
dargs@^5.1.0:
|
1539 |
+
version "5.1.0"
|
1540 |
+
resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
|
1541 |
+
|
1542 |
+
dashdash@^1.12.0:
|
1543 |
+
version "1.14.1"
|
1544 |
+
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
1545 |
+
dependencies:
|
1546 |
+
assert-plus "^1.0.0"
|
1547 |
+
|
1548 |
+
date-fns@^1.27.2:
|
1549 |
+
version "1.29.0"
|
1550 |
+
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
|
1551 |
+
|
1552 |
+
date-now@^0.1.4:
|
1553 |
+
version "0.1.4"
|
1554 |
+
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
1555 |
+
|
1556 |
+
dateformat@^3.0.2:
|
1557 |
+
version "3.0.3"
|
1558 |
+
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
1559 |
+
|
1560 |
+
debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
|
1561 |
+
version "2.6.9"
|
1562 |
+
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
1563 |
+
dependencies:
|
1564 |
+
ms "2.0.0"
|
1565 |
+
|
1566 |
+
debug@^3.1.0:
|
1567 |
+
version "3.1.0"
|
1568 |
+
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
1569 |
+
dependencies:
|
1570 |
+
ms "2.0.0"
|
1571 |
+
|
1572 |
+
decamelize@^1.1.1, decamelize@^1.1.2:
|
1573 |
+
version "1.2.0"
|
1574 |
+
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
1575 |
+
|
1576 |
+
decode-uri-component@^0.2.0:
|
1577 |
+
version "0.2.0"
|
1578 |
+
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
1579 |
+
|
1580 |
+
decompress-response@^3.2.0, decompress-response@^3.3.0:
|
1581 |
+
version "3.3.0"
|
1582 |
+
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
|
1583 |
+
dependencies:
|
1584 |
+
mimic-response "^1.0.0"
|
1585 |
+
|
1586 |
+
deep-extend@^0.4.0, deep-extend@~0.4.0:
|
1587 |
+
version "0.4.2"
|
1588 |
+
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
|
1589 |
+
|
1590 |
+
define-property@^0.2.5:
|
1591 |
+
version "0.2.5"
|
1592 |
+
resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
|
1593 |
+
dependencies:
|
1594 |
+
is-descriptor "^0.1.0"
|
1595 |
+
|
1596 |
+
define-property@^1.0.0:
|
1597 |
+
version "1.0.0"
|
1598 |
+
resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
|
1599 |
+
dependencies:
|
1600 |
+
is-descriptor "^1.0.0"
|
1601 |
+
|
1602 |
+
define-property@^2.0.2:
|
1603 |
+
version "2.0.2"
|
1604 |
+
resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
|
1605 |
+
dependencies:
|
1606 |
+
is-descriptor "^1.0.2"
|
1607 |
+
isobject "^3.0.1"
|
1608 |
+
|
1609 |
+
defined@^1.0.0:
|
1610 |
+
version "1.0.0"
|
1611 |
+
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
|
1612 |
+
|
1613 |
+
delayed-stream@~1.0.0:
|
1614 |
+
version "1.0.0"
|
1615 |
+
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
1616 |
+
|
1617 |
+
delegates@^1.0.0:
|
1618 |
+
version "1.0.0"
|
1619 |
+
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
1620 |
+
|
1621 |
+
des.js@^1.0.0:
|
1622 |
+
version "1.0.0"
|
1623 |
+
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
|
1624 |
+
dependencies:
|
1625 |
+
inherits "^2.0.1"
|
1626 |
+
minimalistic-assert "^1.0.0"
|
1627 |
+
|
1628 |
+
detect-conflict@^1.0.0:
|
1629 |
+
version "1.0.1"
|
1630 |
+
resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e"
|
1631 |
+
|
1632 |
+
detect-indent@^4.0.0:
|
1633 |
+
version "4.0.0"
|
1634 |
+
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
|
1635 |
+
dependencies:
|
1636 |
+
repeating "^2.0.0"
|
1637 |
+
|
1638 |
+
detect-libc@^1.0.2:
|
1639 |
+
version "1.0.3"
|
1640 |
+
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
1641 |
+
|
1642 |
+
diff@^3.3.1, diff@^3.5.0:
|
1643 |
+
version "3.5.0"
|
1644 |
+
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
1645 |
+
|
1646 |
+
diffie-hellman@^5.0.0:
|
1647 |
+
version "5.0.3"
|
1648 |
+
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
|
1649 |
+
dependencies:
|
1650 |
+
bn.js "^4.1.0"
|
1651 |
+
miller-rabin "^4.0.0"
|
1652 |
+
randombytes "^2.0.0"
|
1653 |
+
|
1654 |
+
dom-serializer@0:
|
1655 |
+
version "0.1.0"
|
1656 |
+
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
|
1657 |
+
dependencies:
|
1658 |
+
domelementtype "~1.1.1"
|
1659 |
+
entities "~1.1.1"
|
1660 |
+
|
1661 |
+
domain-browser@^1.1.1:
|
1662 |
+
version "1.2.0"
|
1663 |
+
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
1664 |
+
|
1665 |
+
domelementtype@1, domelementtype@^1.3.0:
|
1666 |
+
version "1.3.0"
|
1667 |
+
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
|
1668 |
+
|
1669 |
+
domelementtype@~1.1.1:
|
1670 |
+
version "1.1.3"
|
1671 |
+
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
|
1672 |
+
|
1673 |
+
domhandler@^2.3.0:
|
1674 |
+
version "2.4.1"
|
1675 |
+
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
|
1676 |
+
dependencies:
|
1677 |
+
domelementtype "1"
|
1678 |
+
|
1679 |
+
domutils@^1.5.1:
|
1680 |
+
version "1.7.0"
|
1681 |
+
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
|
1682 |
+
dependencies:
|
1683 |
+
dom-serializer "0"
|
1684 |
+
domelementtype "1"
|
1685 |
+
|
1686 |
+
dot-prop@^4.1.1:
|
1687 |
+
version "4.2.0"
|
1688 |
+
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
|
1689 |
+
dependencies:
|
1690 |
+
is-obj "^1.0.0"
|
1691 |
+
|
1692 |
+
duplexer3@^0.1.4:
|
1693 |
+
version "0.1.4"
|
1694 |
+
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
1695 |
+
|
1696 |
+
duplexify@^3.4.2, duplexify@^3.5.3:
|
1697 |
+
version "3.5.4"
|
1698 |
+
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4"
|
1699 |
+
dependencies:
|
1700 |
+
end-of-stream "^1.0.0"
|
1701 |
+
inherits "^2.0.1"
|
1702 |
+
readable-stream "^2.0.0"
|
1703 |
+
stream-shift "^1.0.0"
|
1704 |
+
|
1705 |
+
ecc-jsbn@~0.1.1:
|
1706 |
+
version "0.1.1"
|
1707 |
+
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
|
1708 |
+
dependencies:
|
1709 |
+
jsbn "~0.1.0"
|
1710 |
+
|
1711 |
+
editions@^1.3.3:
|
1712 |
+
version "1.3.4"
|
1713 |
+
resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b"
|
1714 |
+
|
1715 |
+
ejs@^2.3.1:
|
1716 |
+
version "2.5.8"
|
1717 |
+
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380"
|
1718 |
+
|
1719 |
+
electron-to-chromium@^1.2.7:
|
1720 |
+
version "1.3.42"
|
1721 |
+
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz#95c33bf01d0cc405556aec899fe61fd4d76ea0f9"
|
1722 |
+
|
1723 |
+
elegant-spinner@^1.0.1:
|
1724 |
+
version "1.0.1"
|
1725 |
+
resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
|
1726 |
+
|
1727 |
+
elliptic@^6.0.0:
|
1728 |
+
version "6.4.0"
|
1729 |
+
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
|
1730 |
+
dependencies:
|
1731 |
+
bn.js "^4.4.0"
|
1732 |
+
brorand "^1.0.1"
|
1733 |
+
hash.js "^1.0.0"
|
1734 |
+
hmac-drbg "^1.0.0"
|
1735 |
+
inherits "^2.0.1"
|
1736 |
+
minimalistic-assert "^1.0.0"
|
1737 |
+
minimalistic-crypto-utils "^1.0.0"
|
1738 |
+
|
1739 |
+
emojis-list@^2.0.0:
|
1740 |
+
version "2.1.0"
|
1741 |
+
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
1742 |
+
|
1743 |
+
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
1744 |
+
version "1.4.1"
|
1745 |
+
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
1746 |
+
dependencies:
|
1747 |
+
once "^1.4.0"
|
1748 |
+
|
1749 |
+
enhanced-resolve@^4.0.0:
|
1750 |
+
version "4.0.0"
|
1751 |
+
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a"
|
1752 |
+
dependencies:
|
1753 |
+
graceful-fs "^4.1.2"
|
1754 |
+
memory-fs "^0.4.0"
|
1755 |
+
tapable "^1.0.0"
|
1756 |
+
|
1757 |
+
entities@^1.1.1, entities@~1.1.1:
|
1758 |
+
version "1.1.1"
|
1759 |
+
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
|
1760 |
+
|
1761 |
+
envinfo@^4.4.2:
|
1762 |
+
version "4.4.2"
|
1763 |
+
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-4.4.2.tgz#472c49f3a8b9bca73962641ce7cb692bf623cd1c"
|
1764 |
+
|
1765 |
+
errno@^0.1.3, errno@~0.1.7:
|
1766 |
+
version "0.1.7"
|
1767 |
+
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
|
1768 |
+
dependencies:
|
1769 |
+
prr "~1.0.1"
|
1770 |
+
|
1771 |
+
error-ex@^1.2.0, error-ex@^1.3.1:
|
1772 |
+
version "1.3.1"
|
1773 |
+
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
|
1774 |
+
dependencies:
|
1775 |
+
is-arrayish "^0.2.1"
|
1776 |
+
|
1777 |
+
error@^7.0.2:
|
1778 |
+
version "7.0.2"
|
1779 |
+
resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02"
|
1780 |
+
dependencies:
|
1781 |
+
string-template "~0.2.1"
|
1782 |
+
xtend "~4.0.0"
|
1783 |
+
|
1784 |
+
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
1785 |
+
version "1.0.5"
|
1786 |
+
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
1787 |
+
|
1788 |
+
eslint-plugin-html@^4.0.2:
|
1789 |
+
version "4.0.3"
|
1790 |
+
resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-4.0.3.tgz#97d52dcf9e22724505d02719fbd02754013c8a17"
|
1791 |
+
dependencies:
|
1792 |
+
htmlparser2 "^3.8.2"
|
1793 |
+
|
1794 |
+
eslint-scope@^3.7.1:
|
1795 |
+
version "3.7.1"
|
1796 |
+
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
|
1797 |
+
dependencies:
|
1798 |
+
esrecurse "^4.1.0"
|
1799 |
+
estraverse "^4.1.1"
|
1800 |
+
|
1801 |
+
esprima@^2.6.0:
|
1802 |
+
version "2.7.3"
|
1803 |
+
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
|
1804 |
+
|
1805 |
+
esprima@^4.0.0, esprima@~4.0.0:
|
1806 |
+
version "4.0.0"
|
1807 |
+
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
|
1808 |
+
|
1809 |
+
esrecurse@^4.1.0:
|
1810 |
+
version "4.2.1"
|
1811 |
+
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
|
1812 |
+
dependencies:
|
1813 |
+
estraverse "^4.1.0"
|
1814 |
+
|
1815 |
+
estraverse@^4.1.0, estraverse@^4.1.1:
|
1816 |
+
version "4.2.0"
|
1817 |
+
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
|
1818 |
+
|
1819 |
+
esutils@^2.0.2:
|
1820 |
+
version "2.0.2"
|
1821 |
+
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
|
1822 |
+
|
1823 |
+
events@^1.0.0:
|
1824 |
+
version "1.1.1"
|
1825 |
+
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
|
1826 |
+
|
1827 |
+
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
|
1828 |
+
version "1.0.3"
|
1829 |
+
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
|
1830 |
+
dependencies:
|
1831 |
+
md5.js "^1.3.4"
|
1832 |
+
safe-buffer "^5.1.1"
|
1833 |
+
|
1834 |
+
execa@^0.7.0:
|
1835 |
+
version "0.7.0"
|
1836 |
+
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
1837 |
+
dependencies:
|
1838 |
+
cross-spawn "^5.0.1"
|
1839 |
+
get-stream "^3.0.0"
|
1840 |
+
is-stream "^1.1.0"
|
1841 |
+
npm-run-path "^2.0.0"
|
1842 |
+
p-finally "^1.0.0"
|
1843 |
+
signal-exit "^3.0.0"
|
1844 |
+
strip-eof "^1.0.0"
|
1845 |
+
|
1846 |
+
exit-hook@^1.0.0:
|
1847 |
+
version "1.1.1"
|
1848 |
+
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
|
1849 |
+
|
1850 |
+
expand-brackets@^0.1.4:
|
1851 |
+
version "0.1.5"
|
1852 |
+
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
|
1853 |
+
dependencies:
|
1854 |
+
is-posix-bracket "^0.1.0"
|
1855 |
+
|
1856 |
+
expand-brackets@^2.1.4:
|
1857 |
+
version "2.1.4"
|
1858 |
+
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
1859 |
+
dependencies:
|
1860 |
+
debug "^2.3.3"
|
1861 |
+
define-property "^0.2.5"
|
1862 |
+
extend-shallow "^2.0.1"
|
1863 |
+
posix-character-classes "^0.1.0"
|
1864 |
+
regex-not "^1.0.0"
|
1865 |
+
snapdragon "^0.8.1"
|
1866 |
+
to-regex "^3.0.1"
|
1867 |
+
|
1868 |
+
expand-range@^1.8.1:
|
1869 |
+
version "1.8.2"
|
1870 |
+
resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
|
1871 |
+
dependencies:
|
1872 |
+
fill-range "^2.1.0"
|
1873 |
+
|
1874 |
+
expand-tilde@^2.0.0, expand-tilde@^2.0.2:
|
1875 |
+
version "2.0.2"
|
1876 |
+
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
|
1877 |
+
dependencies:
|
1878 |
+
homedir-polyfill "^1.0.1"
|
1879 |
+
|
1880 |
+
extend-shallow@^2.0.1:
|
1881 |
+
version "2.0.1"
|
1882 |
+
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
1883 |
+
dependencies:
|
1884 |
+
is-extendable "^0.1.0"
|
1885 |
+
|
1886 |
+
extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
1887 |
+
version "3.0.2"
|
1888 |
+
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
|
1889 |
+
dependencies:
|
1890 |
+
assign-symbols "^1.0.0"
|
1891 |
+
is-extendable "^1.0.1"
|
1892 |
+
|
1893 |
+
extend@~3.0.0:
|
1894 |
+
version "3.0.1"
|
1895 |
+
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
|
1896 |
+
|
1897 |
+
external-editor@^2.0.4, external-editor@^2.1.0:
|
1898 |
+
version "2.2.0"
|
1899 |
+
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
|
1900 |
+
dependencies:
|
1901 |
+
chardet "^0.4.0"
|
1902 |
+
iconv-lite "^0.4.17"
|
1903 |
+
tmp "^0.0.33"
|
1904 |
+
|
1905 |
+
extglob@^0.3.1:
|
1906 |
+
version "0.3.2"
|
1907 |
+
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
|
1908 |
+
dependencies:
|
1909 |
+
is-extglob "^1.0.0"
|
1910 |
+
|
1911 |
+
extglob@^2.0.4:
|
1912 |
+
version "2.0.4"
|
1913 |
+
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
|
1914 |
+
dependencies:
|
1915 |
+
array-unique "^0.3.2"
|
1916 |
+
define-property "^1.0.0"
|
1917 |
+
expand-brackets "^2.1.4"
|
1918 |
+
extend-shallow "^2.0.1"
|
1919 |
+
fragment-cache "^0.2.1"
|
1920 |
+
regex-not "^1.0.0"
|
1921 |
+
snapdragon "^0.8.1"
|
1922 |
+
to-regex "^3.0.1"
|
1923 |
+
|
1924 |
+
extract-text-webpack-plugin@^4.0.0-beta.0:
|
1925 |
+
version "4.0.0-beta.0"
|
1926 |
+
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz#f7361d7ff430b42961f8d1321ba8c1757b5d4c42"
|
1927 |
+
dependencies:
|
1928 |
+
async "^2.4.1"
|
1929 |
+
loader-utils "^1.1.0"
|
1930 |
+
schema-utils "^0.4.5"
|
1931 |
+
webpack-sources "^1.1.0"
|
1932 |
+
|
1933 |
+
extsprintf@1.3.0:
|
1934 |
+
version "1.3.0"
|
1935 |
+
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
1936 |
+
|
1937 |
+
extsprintf@^1.2.0:
|
1938 |
+
version "1.4.0"
|
1939 |
+
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
1940 |
+
|
1941 |
+
fast-deep-equal@^1.0.0:
|
1942 |
+
version "1.1.0"
|
1943 |
+
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
|
1944 |
+
|
1945 |
+
fast-json-stable-stringify@^2.0.0:
|
1946 |
+
version "2.0.0"
|
1947 |
+
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
1948 |
+
|
1949 |
+
fastparse@^1.1.1:
|
1950 |
+
version "1.1.1"
|
1951 |
+
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
|
1952 |
+
|
1953 |
+
figures@^1.7.0:
|
1954 |
+
version "1.7.0"
|
1955 |
+
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
|
1956 |
+
dependencies:
|
1957 |
+
escape-string-regexp "^1.0.5"
|
1958 |
+
object-assign "^4.1.0"
|
1959 |
+
|
1960 |
+
figures@^2.0.0:
|
1961 |
+
version "2.0.0"
|
1962 |
+
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
1963 |
+
dependencies:
|
1964 |
+
escape-string-regexp "^1.0.5"
|
1965 |
+
|
1966 |
+
filename-regex@^2.0.0:
|
1967 |
+
version "2.0.1"
|
1968 |
+
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
|
1969 |
+
|
1970 |
+
fill-range@^2.1.0:
|
1971 |
+
version "2.2.3"
|
1972 |
+
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
|
1973 |
+
dependencies:
|
1974 |
+
is-number "^2.1.0"
|
1975 |
+
isobject "^2.0.0"
|
1976 |
+
randomatic "^1.1.3"
|
1977 |
+
repeat-element "^1.1.2"
|
1978 |
+
repeat-string "^1.5.2"
|
1979 |
+
|
1980 |
+
fill-range@^4.0.0:
|
1981 |
+
version "4.0.0"
|
1982 |
+
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
|
1983 |
+
dependencies:
|
1984 |
+
extend-shallow "^2.0.1"
|
1985 |
+
is-number "^3.0.0"
|
1986 |
+
repeat-string "^1.6.1"
|
1987 |
+
to-regex-range "^2.1.0"
|
1988 |
+
|
1989 |
+
find-cache-dir@^1.0.0:
|
1990 |
+
version "1.0.0"
|
1991 |
+
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
|
1992 |
+
dependencies:
|
1993 |
+
commondir "^1.0.1"
|
1994 |
+
make-dir "^1.0.0"
|
1995 |
+
pkg-dir "^2.0.0"
|
1996 |
+
|
1997 |
+
find-up@^2.0.0, find-up@^2.1.0:
|
1998 |
+
version "2.1.0"
|
1999 |
+
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
2000 |
+
dependencies:
|
2001 |
+
locate-path "^2.0.0"
|
2002 |
+
|
2003 |
+
first-chunk-stream@^2.0.0:
|
2004 |
+
version "2.0.0"
|
2005 |
+
resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70"
|
2006 |
+
dependencies:
|
2007 |
+
readable-stream "^2.0.2"
|
2008 |
+
|
2009 |
+
flatten@^1.0.2:
|
2010 |
+
version "1.0.2"
|
2011 |
+
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
2012 |
+
|
2013 |
+
flow-parser@^0.*:
|
2014 |
+
version "0.70.0"
|
2015 |
+
resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.70.0.tgz#9c310187efe4380ba9a251284e9b83b95c49e857"
|
2016 |
+
|
2017 |
+
flush-write-stream@^1.0.0:
|
2018 |
+
version "1.0.3"
|
2019 |
+
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
|
2020 |
+
dependencies:
|
2021 |
+
inherits "^2.0.1"
|
2022 |
+
readable-stream "^2.0.4"
|
2023 |
+
|
2024 |
+
for-in@^1.0.1, for-in@^1.0.2:
|
2025 |
+
version "1.0.2"
|
2026 |
+
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
2027 |
+
|
2028 |
+
for-own@^0.1.4:
|
2029 |
+
version "0.1.5"
|
2030 |
+
resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
|
2031 |
+
dependencies:
|
2032 |
+
for-in "^1.0.1"
|
2033 |
+
|
2034 |
+
forever-agent@~0.6.1:
|
2035 |
+
version "0.6.1"
|
2036 |
+
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
2037 |
+
|
2038 |
+
form-data@~2.1.1:
|
2039 |
+
version "2.1.4"
|
2040 |
+
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
|
2041 |
+
dependencies:
|
2042 |
+
asynckit "^0.4.0"
|
2043 |
+
combined-stream "^1.0.5"
|
2044 |
+
mime-types "^2.1.12"
|
2045 |
+
|
2046 |
+
fragment-cache@^0.2.1:
|
2047 |
+
version "0.2.1"
|
2048 |
+
resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
2049 |
+
dependencies:
|
2050 |
+
map-cache "^0.2.2"
|
2051 |
+
|
2052 |
+
from2@^2.1.0, from2@^2.1.1:
|
2053 |
+
version "2.3.0"
|
2054 |
+
resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
|
2055 |
+
dependencies:
|
2056 |
+
inherits "^2.0.1"
|
2057 |
+
readable-stream "^2.0.0"
|
2058 |
+
|
2059 |
+
fs-extra@^4.0.2:
|
2060 |
+
version "4.0.3"
|
2061 |
+
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
|
2062 |
+
dependencies:
|
2063 |
+
graceful-fs "^4.1.2"
|
2064 |
+
jsonfile "^4.0.0"
|
2065 |
+
universalify "^0.1.0"
|
2066 |
+
|
2067 |
+
fs-write-stream-atomic@^1.0.8:
|
2068 |
+
version "1.0.10"
|
2069 |
+
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
|
2070 |
+
dependencies:
|
2071 |
+
graceful-fs "^4.1.2"
|
2072 |
+
iferr "^0.1.5"
|
2073 |
+
imurmurhash "^0.1.4"
|
2074 |
+
readable-stream "1 || 2"
|
2075 |
+
|
2076 |
+
fs.realpath@^1.0.0:
|
2077 |
+
version "1.0.0"
|
2078 |
+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
2079 |
+
|
2080 |
+
fsevents@^1.1.2:
|
2081 |
+
version "1.1.3"
|
2082 |
+
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
|
2083 |
+
dependencies:
|
2084 |
+
nan "^2.3.0"
|
2085 |
+
node-pre-gyp "^0.6.39"
|
2086 |
+
|
2087 |
+
fstream-ignore@^1.0.5:
|
2088 |
+
version "1.0.5"
|
2089 |
+
resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
|
2090 |
+
dependencies:
|
2091 |
+
fstream "^1.0.0"
|
2092 |
+
inherits "2"
|
2093 |
+
minimatch "^3.0.0"
|
2094 |
+
|
2095 |
+
fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
|
2096 |
+
version "1.0.11"
|
2097 |
+
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
|
2098 |
+
dependencies:
|
2099 |
+
graceful-fs "^4.1.2"
|
2100 |
+
inherits "~2.0.0"
|
2101 |
+
mkdirp ">=0.5 0"
|
2102 |
+
rimraf "2"
|
2103 |
+
|
2104 |
+
function-bind@^1.0.2:
|
2105 |
+
version "1.1.1"
|
2106 |
+
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
2107 |
+
|
2108 |
+
gather-stream@^1.0.0:
|
2109 |
+
version "1.0.0"
|
2110 |
+
resolved "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b"
|
2111 |
+
|
2112 |
+
gauge@~2.7.3:
|
2113 |
+
version "2.7.4"
|
2114 |
+
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
2115 |
+
dependencies:
|
2116 |
+
aproba "^1.0.3"
|
2117 |
+
console-control-strings "^1.0.0"
|
2118 |
+
has-unicode "^2.0.0"
|
2119 |
+
object-assign "^4.1.0"
|
2120 |
+
signal-exit "^3.0.0"
|
2121 |
+
string-width "^1.0.1"
|
2122 |
+
strip-ansi "^3.0.1"
|
2123 |
+
wide-align "^1.1.0"
|
2124 |
+
|
2125 |
+
get-caller-file@^1.0.1:
|
2126 |
+
version "1.0.2"
|
2127 |
+
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
|
2128 |
+
|
2129 |
+
get-stream@3.0.0, get-stream@^3.0.0:
|
2130 |
+
version "3.0.0"
|
2131 |
+
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
2132 |
+
|
2133 |
+
get-value@^2.0.3, get-value@^2.0.6:
|
2134 |
+
version "2.0.6"
|
2135 |
+
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
2136 |
+
|
2137 |
+
getpass@^0.1.1:
|
2138 |
+
version "0.1.7"
|
2139 |
+
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
2140 |
+
dependencies:
|
2141 |
+
assert-plus "^1.0.0"
|
2142 |
+
|
2143 |
+
gh-got@^6.0.0:
|
2144 |
+
version "6.0.0"
|
2145 |
+
resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0"
|
2146 |
+
dependencies:
|
2147 |
+
got "^7.0.0"
|
2148 |
+
is-plain-obj "^1.1.0"
|
2149 |
+
|
2150 |
+
github-username@^4.0.0:
|
2151 |
+
version "4.1.0"
|
2152 |
+
resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417"
|
2153 |
+
dependencies:
|
2154 |
+
gh-got "^6.0.0"
|
2155 |
+
|
2156 |
+
glob-all@^3.1.0:
|
2157 |
+
version "3.1.0"
|
2158 |
+
resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab"
|
2159 |
+
dependencies:
|
2160 |
+
glob "^7.0.5"
|
2161 |
+
yargs "~1.2.6"
|
2162 |
+
|
2163 |
+
glob-base@^0.3.0:
|
2164 |
+
version "0.3.0"
|
2165 |
+
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
|
2166 |
+
dependencies:
|
2167 |
+
glob-parent "^2.0.0"
|
2168 |
+
is-glob "^2.0.0"
|
2169 |
+
|
2170 |
+
glob-parent@^2.0.0:
|
2171 |
+
version "2.0.0"
|
2172 |
+
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
|
2173 |
+
dependencies:
|
2174 |
+
is-glob "^2.0.0"
|
2175 |
+
|
2176 |
+
glob-parent@^3.1.0:
|
2177 |
+
version "3.1.0"
|
2178 |
+
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
|
2179 |
+
dependencies:
|
2180 |
+
is-glob "^3.1.0"
|
2181 |
+
path-dirname "^1.0.0"
|
2182 |
+
|
2183 |
+
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
|
2184 |
+
version "7.1.2"
|
2185 |
+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
2186 |
+
dependencies:
|
2187 |
+
fs.realpath "^1.0.0"
|
2188 |
+
inflight "^1.0.4"
|
2189 |
+
inherits "2"
|
2190 |
+
minimatch "^3.0.4"
|
2191 |
+
once "^1.3.0"
|
2192 |
+
path-is-absolute "^1.0.0"
|
2193 |
+
|
2194 |
+
global-modules@^1.0.0:
|
2195 |
+
version "1.0.0"
|
2196 |
+
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
|
2197 |
+
dependencies:
|
2198 |
+
global-prefix "^1.0.1"
|
2199 |
+
is-windows "^1.0.1"
|
2200 |
+
resolve-dir "^1.0.0"
|
2201 |
+
|
2202 |
+
global-prefix@^1.0.1:
|
2203 |
+
version "1.0.2"
|
2204 |
+
resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
|
2205 |
+
dependencies:
|
2206 |
+
expand-tilde "^2.0.2"
|
2207 |
+
homedir-polyfill "^1.0.1"
|
2208 |
+
ini "^1.3.4"
|
2209 |
+
is-windows "^1.0.1"
|
2210 |
+
which "^1.2.14"
|
2211 |
+
|
2212 |
+
globals@^9.18.0:
|
2213 |
+
version "9.18.0"
|
2214 |
+
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
2215 |
+
|
2216 |
+
globby@^6.1.0:
|
2217 |
+
version "6.1.0"
|
2218 |
+
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
|
2219 |
+
dependencies:
|
2220 |
+
array-union "^1.0.1"
|
2221 |
+
glob "^7.0.3"
|
2222 |
+
object-assign "^4.0.1"
|
2223 |
+
pify "^2.0.0"
|
2224 |
+
pinkie-promise "^2.0.0"
|
2225 |
+
|
2226 |
+
got@^7.0.0:
|
2227 |
+
version "7.1.0"
|
2228 |
+
resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
|
2229 |
+
dependencies:
|
2230 |
+
decompress-response "^3.2.0"
|
2231 |
+
duplexer3 "^0.1.4"
|
2232 |
+
get-stream "^3.0.0"
|
2233 |
+
is-plain-obj "^1.1.0"
|
2234 |
+
is-retry-allowed "^1.0.0"
|
2235 |
+
is-stream "^1.0.0"
|
2236 |
+
isurl "^1.0.0-alpha5"
|
2237 |
+
lowercase-keys "^1.0.0"
|
2238 |
+
p-cancelable "^0.3.0"
|
2239 |
+
p-timeout "^1.1.1"
|
2240 |
+
safe-buffer "^5.0.1"
|
2241 |
+
timed-out "^4.0.0"
|
2242 |
+
url-parse-lax "^1.0.0"
|
2243 |
+
url-to-options "^1.0.1"
|
2244 |
+
|
2245 |
+
got@^8.2.0:
|
2246 |
+
version "8.3.0"
|
2247 |
+
resolved "https://registry.yarnpkg.com/got/-/got-8.3.0.tgz#6ba26e75f8a6cc4c6b3eb1fe7ce4fec7abac8533"
|
2248 |
+
dependencies:
|
2249 |
+
"@sindresorhus/is" "^0.7.0"
|
2250 |
+
cacheable-request "^2.1.1"
|
2251 |
+
decompress-response "^3.3.0"
|
2252 |
+
duplexer3 "^0.1.4"
|
2253 |
+
get-stream "^3.0.0"
|
2254 |
+
into-stream "^3.1.0"
|
2255 |
+
is-retry-allowed "^1.1.0"
|
2256 |
+
isurl "^1.0.0-alpha5"
|
2257 |
+
lowercase-keys "^1.0.0"
|
2258 |
+
mimic-response "^1.0.0"
|
2259 |
+
p-cancelable "^0.4.0"
|
2260 |
+
p-timeout "^2.0.1"
|
2261 |
+
pify "^3.0.0"
|
2262 |
+
safe-buffer "^5.1.1"
|
2263 |
+
timed-out "^4.0.1"
|
2264 |
+
url-parse-lax "^3.0.0"
|
2265 |
+
url-to-options "^1.0.1"
|
2266 |
+
|
2267 |
+
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
2268 |
+
version "4.1.11"
|
2269 |
+
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
2270 |
+
|
2271 |
+
grouped-queue@^0.3.3:
|
2272 |
+
version "0.3.3"
|
2273 |
+
resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c"
|
2274 |
+
dependencies:
|
2275 |
+
lodash "^4.17.2"
|
2276 |
+
|
2277 |
+
har-schema@^1.0.5:
|
2278 |
+
version "1.0.5"
|
2279 |
+
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
|
2280 |
+
|
2281 |
+
har-validator@~4.2.1:
|
2282 |
+
version "4.2.1"
|
2283 |
+
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
|
2284 |
+
dependencies:
|
2285 |
+
ajv "^4.9.1"
|
2286 |
+
har-schema "^1.0.5"
|
2287 |
+
|
2288 |
+
has-ansi@^2.0.0:
|
2289 |
+
version "2.0.0"
|
2290 |
+
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
2291 |
+
dependencies:
|
2292 |
+
ansi-regex "^2.0.0"
|
2293 |
+
|
2294 |
+
has-color@~0.1.0:
|
2295 |
+
version "0.1.7"
|
2296 |
+
resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
|
2297 |
+
|
2298 |
+
has-flag@^1.0.0:
|
2299 |
+
version "1.0.0"
|
2300 |
+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
|
2301 |
+
|
2302 |
+
has-flag@^3.0.0:
|
2303 |
+
version "3.0.0"
|
2304 |
+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
2305 |
+
|
2306 |
+
has-symbol-support-x@^1.4.1:
|
2307 |
+
version "1.4.2"
|
2308 |
+
resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
|
2309 |
+
|
2310 |
+
has-to-string-tag-x@^1.2.0:
|
2311 |
+
version "1.4.1"
|
2312 |
+
resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
|
2313 |
+
dependencies:
|
2314 |
+
has-symbol-support-x "^1.4.1"
|
2315 |
+
|
2316 |
+
has-unicode@^2.0.0:
|
2317 |
+
version "2.0.1"
|
2318 |
+
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
2319 |
+
|
2320 |
+
has-value@^0.3.1:
|
2321 |
+
version "0.3.1"
|
2322 |
+
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
|
2323 |
+
dependencies:
|
2324 |
+
get-value "^2.0.3"
|
2325 |
+
has-values "^0.1.4"
|
2326 |
+
isobject "^2.0.0"
|
2327 |
+
|
2328 |
+
has-value@^1.0.0:
|
2329 |
+
version "1.0.0"
|
2330 |
+
resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
|
2331 |
+
dependencies:
|
2332 |
+
get-value "^2.0.6"
|
2333 |
+
has-values "^1.0.0"
|
2334 |
+
isobject "^3.0.0"
|
2335 |
+
|
2336 |
+
has-values@^0.1.4:
|
2337 |
+
version "0.1.4"
|
2338 |
+
resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
|
2339 |
+
|
2340 |
+
has-values@^1.0.0:
|
2341 |
+
version "1.0.0"
|
2342 |
+
resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
|
2343 |
+
dependencies:
|
2344 |
+
is-number "^3.0.0"
|
2345 |
+
kind-of "^4.0.0"
|
2346 |
+
|
2347 |
+
has@^1.0.1:
|
2348 |
+
version "1.0.1"
|
2349 |
+
resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
|
2350 |
+
dependencies:
|
2351 |
+
function-bind "^1.0.2"
|
2352 |
+
|
2353 |
+
hash-base@^2.0.0:
|
2354 |
+
version "2.0.2"
|
2355 |
+
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
|
2356 |
+
dependencies:
|
2357 |
+
inherits "^2.0.1"
|
2358 |
+
|
2359 |
+
hash-base@^3.0.0:
|
2360 |
+
version "3.0.4"
|
2361 |
+
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
|
2362 |
+
dependencies:
|
2363 |
+
inherits "^2.0.1"
|
2364 |
+
safe-buffer "^5.0.1"
|
2365 |
+
|
2366 |
+
hash.js@^1.0.0, hash.js@^1.0.3:
|
2367 |
+
version "1.1.3"
|
2368 |
+
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
|
2369 |
+
dependencies:
|
2370 |
+
inherits "^2.0.3"
|
2371 |
+
minimalistic-assert "^1.0.0"
|
2372 |
+
|
2373 |
+
hawk@3.1.3, hawk@~3.1.3:
|
2374 |
+
version "3.1.3"
|
2375 |
+
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
|
2376 |
+
dependencies:
|
2377 |
+
boom "2.x.x"
|
2378 |
+
cryptiles "2.x.x"
|
2379 |
+
hoek "2.x.x"
|
2380 |
+
sntp "1.x.x"
|
2381 |
+
|
2382 |
+
hmac-drbg@^1.0.0:
|
2383 |
+
version "1.0.1"
|
2384 |
+
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
2385 |
+
dependencies:
|
2386 |
+
hash.js "^1.0.3"
|
2387 |
+
minimalistic-assert "^1.0.0"
|
2388 |
+
minimalistic-crypto-utils "^1.0.1"
|
2389 |
+
|
2390 |
+
hoek@2.x.x:
|
2391 |
+
version "2.16.3"
|
2392 |
+
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
|
2393 |
+
|
2394 |
+
home-or-tmp@^2.0.0:
|
2395 |
+
version "2.0.0"
|
2396 |
+
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
|
2397 |
+
dependencies:
|
2398 |
+
os-homedir "^1.0.0"
|
2399 |
+
os-tmpdir "^1.0.1"
|
2400 |
+
|
2401 |
+
homedir-polyfill@^1.0.1:
|
2402 |
+
version "1.0.1"
|
2403 |
+
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
|
2404 |
+
dependencies:
|
2405 |
+
parse-passwd "^1.0.0"
|
2406 |
+
|
2407 |
+
hosted-git-info@^2.1.4:
|
2408 |
+
version "2.6.0"
|
2409 |
+
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
|
2410 |
+
|
2411 |
+
html-comment-regex@^1.1.0:
|
2412 |
+
version "1.1.1"
|
2413 |
+
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
|
2414 |
+
|
2415 |
+
htmlparser2@^3.8.2:
|
2416 |
+
version "3.9.2"
|
2417 |
+
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
|
2418 |
+
dependencies:
|
2419 |
+
domelementtype "^1.3.0"
|
2420 |
+
domhandler "^2.3.0"
|
2421 |
+
domutils "^1.5.1"
|
2422 |
+
entities "^1.1.1"
|
2423 |
+
inherits "^2.0.1"
|
2424 |
+
readable-stream "^2.0.2"
|
2425 |
+
|
2426 |
+
http-cache-semantics@3.8.1:
|
2427 |
+
version "3.8.1"
|
2428 |
+
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
|
2429 |
+
|
2430 |
+
http-signature@~1.1.0:
|
2431 |
+
version "1.1.1"
|
2432 |
+
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
|
2433 |
+
dependencies:
|
2434 |
+
assert-plus "^0.2.0"
|
2435 |
+
jsprim "^1.2.2"
|
2436 |
+
sshpk "^1.7.0"
|
2437 |
+
|
2438 |
+
https-browserify@^1.0.0:
|
2439 |
+
version "1.0.0"
|
2440 |
+
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
2441 |
+
|
2442 |
+
iconv-lite@^0.4.17:
|
2443 |
+
version "0.4.21"
|
2444 |
+
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798"
|
2445 |
+
dependencies:
|
2446 |
+
safer-buffer "^2.1.0"
|
2447 |
+
|
2448 |
+
icss-replace-symbols@^1.1.0:
|
2449 |
+
version "1.1.0"
|
2450 |
+
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
2451 |
+
|
2452 |
+
icss-utils@^2.1.0:
|
2453 |
+
version "2.1.0"
|
2454 |
+
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
|
2455 |
+
dependencies:
|
2456 |
+
postcss "^6.0.1"
|
2457 |
+
|
2458 |
+
ieee754@^1.1.4:
|
2459 |
+
version "1.1.11"
|
2460 |
+
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455"
|
2461 |
+
|
2462 |
+
iferr@^0.1.5:
|
2463 |
+
version "0.1.5"
|
2464 |
+
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
|
2465 |
+
|
2466 |
+
import-local@^1.0.0:
|
2467 |
+
version "1.0.0"
|
2468 |
+
resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
|
2469 |
+
dependencies:
|
2470 |
+
pkg-dir "^2.0.0"
|
2471 |
+
resolve-cwd "^2.0.0"
|
2472 |
+
|
2473 |
+
imurmurhash@^0.1.4:
|
2474 |
+
version "0.1.4"
|
2475 |
+
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
2476 |
+
|
2477 |
+
indent-string@^2.1.0:
|
2478 |
+
version "2.1.0"
|
2479 |
+
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
|
2480 |
+
dependencies:
|
2481 |
+
repeating "^2.0.0"
|
2482 |
+
|
2483 |
+
indent-string@^3.0.0:
|
2484 |
+
version "3.2.0"
|
2485 |
+
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
|
2486 |
+
|
2487 |
+
indexes-of@^1.0.1:
|
2488 |
+
version "1.0.1"
|
2489 |
+
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
|
2490 |
+
|
2491 |
+
indexof@0.0.1:
|
2492 |
+
version "0.0.1"
|
2493 |
+
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
|
2494 |
+
|
2495 |
+
inflight@^1.0.4:
|
2496 |
+
version "1.0.6"
|
2497 |
+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
2498 |
+
dependencies:
|
2499 |
+
once "^1.3.0"
|
2500 |
+
wrappy "1"
|
2501 |
+
|
2502 |
+
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
2503 |
+
version "2.0.3"
|
2504 |
+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
2505 |
+
|
2506 |
+
inherits@2.0.1:
|
2507 |
+
version "2.0.1"
|
2508 |
+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
|
2509 |
+
|
2510 |
+
ini@^1.3.4, ini@~1.3.0:
|
2511 |
+
version "1.3.5"
|
2512 |
+
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
|
2513 |
+
|
2514 |
+
inquirer@^3.3.0:
|
2515 |
+
version "3.3.0"
|
2516 |
+
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
|
2517 |
+
dependencies:
|
2518 |
+
ansi-escapes "^3.0.0"
|
2519 |
+
chalk "^2.0.0"
|
2520 |
+
cli-cursor "^2.1.0"
|
2521 |
+
cli-width "^2.0.0"
|
2522 |
+
external-editor "^2.0.4"
|
2523 |
+
figures "^2.0.0"
|
2524 |
+
lodash "^4.3.0"
|
2525 |
+
mute-stream "0.0.7"
|
2526 |
+
run-async "^2.2.0"
|
2527 |
+
rx-lite "^4.0.8"
|
2528 |
+
rx-lite-aggregates "^4.0.8"
|
2529 |
+
string-width "^2.1.0"
|
2530 |
+
strip-ansi "^4.0.0"
|
2531 |
+
through "^2.3.6"
|
2532 |
+
|
2533 |
+
inquirer@^5.1.0:
|
2534 |
+
version "5.2.0"
|
2535 |
+
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726"
|
2536 |
+
dependencies:
|
2537 |
+
ansi-escapes "^3.0.0"
|
2538 |
+
chalk "^2.0.0"
|
2539 |
+
cli-cursor "^2.1.0"
|
2540 |
+
cli-width "^2.0.0"
|
2541 |
+
external-editor "^2.1.0"
|
2542 |
+
figures "^2.0.0"
|
2543 |
+
lodash "^4.3.0"
|
2544 |
+
mute-stream "0.0.7"
|
2545 |
+
run-async "^2.2.0"
|
2546 |
+
rxjs "^5.5.2"
|
2547 |
+
string-width "^2.1.0"
|
2548 |
+
strip-ansi "^4.0.0"
|
2549 |
+
through "^2.3.6"
|
2550 |
+
|
2551 |
+
interpret@^1.0.0, interpret@^1.0.4:
|
2552 |
+
version "1.1.0"
|
2553 |
+
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
|
2554 |
+
|
2555 |
+
into-stream@^3.1.0:
|
2556 |
+
version "3.1.0"
|
2557 |
+
resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
|
2558 |
+
dependencies:
|
2559 |
+
from2 "^2.1.1"
|
2560 |
+
p-is-promise "^1.1.0"
|
2561 |
+
|
2562 |
+
invariant@^2.2.2:
|
2563 |
+
version "2.2.4"
|
2564 |
+
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
2565 |
+
dependencies:
|
2566 |
+
loose-envify "^1.0.0"
|
2567 |
+
|
2568 |
+
invert-kv@^1.0.0:
|
2569 |
+
version "1.0.0"
|
2570 |
+
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
2571 |
+
|
2572 |
+
is-absolute-url@^2.0.0:
|
2573 |
+
version "2.1.0"
|
2574 |
+
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
|
2575 |
+
|
2576 |
+
is-accessor-descriptor@^0.1.6:
|
2577 |
+
version "0.1.6"
|
2578 |
+
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
|
2579 |
+
dependencies:
|
2580 |
+
kind-of "^3.0.2"
|
2581 |
+
|
2582 |
+
is-accessor-descriptor@^1.0.0:
|
2583 |
+
version "1.0.0"
|
2584 |
+
resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
|
2585 |
+
dependencies:
|
2586 |
+
kind-of "^6.0.0"
|
2587 |
+
|
2588 |
+
is-arrayish@^0.2.1:
|
2589 |
+
version "0.2.1"
|
2590 |
+
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
2591 |
+
|
2592 |
+
is-binary-path@^1.0.0:
|
2593 |
+
version "1.0.1"
|
2594 |
+
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
|
2595 |
+
dependencies:
|
2596 |
+
binary-extensions "^1.0.0"
|
2597 |
+
|
2598 |
+
is-buffer@^1.1.5:
|
2599 |
+
version "1.1.6"
|
2600 |
+
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
2601 |
+
|
2602 |
+
is-builtin-module@^1.0.0:
|
2603 |
+
version "1.0.0"
|
2604 |
+
resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
|
2605 |
+
dependencies:
|
2606 |
+
builtin-modules "^1.0.0"
|
2607 |
+
|
2608 |
+
is-data-descriptor@^0.1.4:
|
2609 |
+
version "0.1.4"
|
2610 |
+
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
|
2611 |
+
dependencies:
|
2612 |
+
kind-of "^3.0.2"
|
2613 |
+
|
2614 |
+
is-data-descriptor@^1.0.0:
|
2615 |
+
version "1.0.0"
|
2616 |
+
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
|
2617 |
+
dependencies:
|
2618 |
+
kind-of "^6.0.0"
|
2619 |
+
|
2620 |
+
is-descriptor@^0.1.0:
|
2621 |
+
version "0.1.6"
|
2622 |
+
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
|
2623 |
+
dependencies:
|
2624 |
+
is-accessor-descriptor "^0.1.6"
|
2625 |
+
is-data-descriptor "^0.1.4"
|
2626 |
+
kind-of "^5.0.0"
|
2627 |
+
|
2628 |
+
is-descriptor@^1.0.0, is-descriptor@^1.0.2:
|
2629 |
+
version "1.0.2"
|
2630 |
+
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
|
2631 |
+
dependencies:
|
2632 |
+
is-accessor-descriptor "^1.0.0"
|
2633 |
+
is-data-descriptor "^1.0.0"
|
2634 |
+
kind-of "^6.0.2"
|
2635 |
+
|
2636 |
+
is-directory@^0.3.1:
|
2637 |
+
version "0.3.1"
|
2638 |
+
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
|
2639 |
+
|
2640 |
+
is-dotfile@^1.0.0:
|
2641 |
+
version "1.0.3"
|
2642 |
+
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
|
2643 |
+
|
2644 |
+
is-equal-shallow@^0.1.3:
|
2645 |
+
version "0.1.3"
|
2646 |
+
resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
|
2647 |
+
dependencies:
|
2648 |
+
is-primitive "^2.0.0"
|
2649 |
+
|
2650 |
+
is-extendable@^0.1.0, is-extendable@^0.1.1:
|
2651 |
+
version "0.1.1"
|
2652 |
+
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
2653 |
+
|
2654 |
+
is-extendable@^1.0.1:
|
2655 |
+
version "1.0.1"
|
2656 |
+
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
|
2657 |
+
dependencies:
|
2658 |
+
is-plain-object "^2.0.4"
|
2659 |
+
|
2660 |
+
is-extglob@^1.0.0:
|
2661 |
+
version "1.0.0"
|
2662 |
+
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
|
2663 |
+
|
2664 |
+
is-extglob@^2.1.0, is-extglob@^2.1.1:
|
2665 |
+
version "2.1.1"
|
2666 |
+
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
2667 |
+
|
2668 |
+
is-finite@^1.0.0:
|
2669 |
+
version "1.0.2"
|
2670 |
+
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
|
2671 |
+
dependencies:
|
2672 |
+
number-is-nan "^1.0.0"
|
2673 |
+
|
2674 |
+
is-fullwidth-code-point@^1.0.0:
|
2675 |
+
version "1.0.0"
|
2676 |
+
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
2677 |
+
dependencies:
|
2678 |
+
number-is-nan "^1.0.0"
|
2679 |
+
|
2680 |
+
is-fullwidth-code-point@^2.0.0:
|
2681 |
+
version "2.0.0"
|
2682 |
+
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
2683 |
+
|
2684 |
+
is-glob@^2.0.0, is-glob@^2.0.1:
|
2685 |
+
version "2.0.1"
|
2686 |
+
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
|
2687 |
+
dependencies:
|
2688 |
+
is-extglob "^1.0.0"
|
2689 |
+
|
2690 |
+
is-glob@^3.1.0:
|
2691 |
+
version "3.1.0"
|
2692 |
+
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
|
2693 |
+
dependencies:
|
2694 |
+
is-extglob "^2.1.0"
|
2695 |
+
|
2696 |
+
is-glob@^4.0.0:
|
2697 |
+
version "4.0.0"
|
2698 |
+
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
|
2699 |
+
dependencies:
|
2700 |
+
is-extglob "^2.1.1"
|
2701 |
+
|
2702 |
+
is-number@^2.1.0:
|
2703 |
+
version "2.1.0"
|
2704 |
+
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
|
2705 |
+
dependencies:
|
2706 |
+
kind-of "^3.0.2"
|
2707 |
+
|
2708 |
+
is-number@^3.0.0:
|
2709 |
+
version "3.0.0"
|
2710 |
+
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
2711 |
+
dependencies:
|
2712 |
+
kind-of "^3.0.2"
|
2713 |
+
|
2714 |
+
is-number@^4.0.0:
|
2715 |
+
version "4.0.0"
|
2716 |
+
resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
|
2717 |
+
|
2718 |
+
is-obj@^1.0.0:
|
2719 |
+
version "1.0.1"
|
2720 |
+
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
2721 |
+
|
2722 |
+
is-object@^1.0.1:
|
2723 |
+
version "1.0.1"
|
2724 |
+
resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
|
2725 |
+
|
2726 |
+
is-observable@^0.2.0:
|
2727 |
+
version "0.2.0"
|
2728 |
+
resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2"
|
2729 |
+
dependencies:
|
2730 |
+
symbol-observable "^0.2.2"
|
2731 |
+
|
2732 |
+
is-odd@^2.0.0:
|
2733 |
+
version "2.0.0"
|
2734 |
+
resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
|
2735 |
+
dependencies:
|
2736 |
+
is-number "^4.0.0"
|
2737 |
+
|
2738 |
+
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
|
2739 |
+
version "1.1.0"
|
2740 |
+
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
|
2741 |
+
|
2742 |
+
is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
2743 |
+
version "2.0.4"
|
2744 |
+
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
2745 |
+
dependencies:
|
2746 |
+
isobject "^3.0.1"
|
2747 |
+
|
2748 |
+
is-posix-bracket@^0.1.0:
|
2749 |
+
version "0.1.1"
|
2750 |
+
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
|
2751 |
+
|
2752 |
+
is-primitive@^2.0.0:
|
2753 |
+
version "2.0.0"
|
2754 |
+
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
|
2755 |
+
|
2756 |
+
is-promise@^2.1.0:
|
2757 |
+
version "2.1.0"
|
2758 |
+
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
|
2759 |
+
|
2760 |
+
is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
|
2761 |
+
version "1.1.0"
|
2762 |
+
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
|
2763 |
+
|
2764 |
+
is-scoped@^1.0.0:
|
2765 |
+
version "1.0.0"
|
2766 |
+
resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30"
|
2767 |
+
dependencies:
|
2768 |
+
scoped-regex "^1.0.0"
|
2769 |
+
|
2770 |
+
is-stream@^1.0.0, is-stream@^1.1.0:
|
2771 |
+
version "1.1.0"
|
2772 |
+
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
2773 |
+
|
2774 |
+
is-svg@^2.0.0:
|
2775 |
+
version "2.1.0"
|
2776 |
+
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
|
2777 |
+
dependencies:
|
2778 |
+
html-comment-regex "^1.1.0"
|
2779 |
+
|
2780 |
+
is-typedarray@~1.0.0:
|
2781 |
+
version "1.0.0"
|
2782 |
+
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
2783 |
+
|
2784 |
+
is-utf8@^0.2.0:
|
2785 |
+
version "0.2.1"
|
2786 |
+
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
2787 |
+
|
2788 |
+
is-windows@^1.0.1, is-windows@^1.0.2:
|
2789 |
+
version "1.0.2"
|
2790 |
+
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
|
2791 |
+
|
2792 |
+
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
2793 |
+
version "1.0.0"
|
2794 |
+
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
2795 |
+
|
2796 |
+
isexe@^2.0.0:
|
2797 |
+
version "2.0.0"
|
2798 |
+
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
2799 |
+
|
2800 |
+
isobject@^2.0.0:
|
2801 |
+
version "2.1.0"
|
2802 |
+
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
|
2803 |
+
dependencies:
|
2804 |
+
isarray "1.0.0"
|
2805 |
+
|
2806 |
+
isobject@^3.0.0, isobject@^3.0.1:
|
2807 |
+
version "3.0.1"
|
2808 |
+
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
2809 |
+
|
2810 |
+
isstream@~0.1.2:
|
2811 |
+
version "0.1.2"
|
2812 |
+
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
2813 |
+
|
2814 |
+
istextorbinary@^2.1.0:
|
2815 |
+
version "2.2.1"
|
2816 |
+
resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53"
|
2817 |
+
dependencies:
|
2818 |
+
binaryextensions "2"
|
2819 |
+
editions "^1.3.3"
|
2820 |
+
textextensions "2"
|
2821 |
+
|
2822 |
+
isurl@^1.0.0-alpha5:
|
2823 |
+
version "1.0.0"
|
2824 |
+
resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
|
2825 |
+
dependencies:
|
2826 |
+
has-to-string-tag-x "^1.2.0"
|
2827 |
+
is-object "^1.0.1"
|
2828 |
+
|
2829 |
+
js-base64@^2.1.9:
|
2830 |
+
version "2.4.3"
|
2831 |
+
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
|
2832 |
+
|
2833 |
+
js-tokens@^3.0.0, js-tokens@^3.0.2:
|
2834 |
+
version "3.0.2"
|
2835 |
+
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
2836 |
+
|
2837 |
+
js-yaml@^3.4.3:
|
2838 |
+
version "3.11.0"
|
2839 |
+
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
|
2840 |
+
dependencies:
|
2841 |
+
argparse "^1.0.7"
|
2842 |
+
esprima "^4.0.0"
|
2843 |
+
|
2844 |
+
js-yaml@~3.7.0:
|
2845 |
+
version "3.7.0"
|
2846 |
+
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
|
2847 |
+
dependencies:
|
2848 |
+
argparse "^1.0.7"
|
2849 |
+
esprima "^2.6.0"
|
2850 |
+
|
2851 |
+
jsbn@~0.1.0:
|
2852 |
+
version "0.1.1"
|
2853 |
+
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
2854 |
+
|
2855 |
+
jscodeshift@^0.4.0:
|
2856 |
+
version "0.4.1"
|
2857 |
+
resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.1.tgz#da91a1c2eccfa03a3387a21d39948e251ced444a"
|
2858 |
+
dependencies:
|
2859 |
+
async "^1.5.0"
|
2860 |
+
babel-plugin-transform-flow-strip-types "^6.8.0"
|
2861 |
+
babel-preset-es2015 "^6.9.0"
|
2862 |
+
babel-preset-stage-1 "^6.5.0"
|
2863 |
+
babel-register "^6.9.0"
|
2864 |
+
babylon "^6.17.3"
|
2865 |
+
colors "^1.1.2"
|
2866 |
+
flow-parser "^0.*"
|
2867 |
+
lodash "^4.13.1"
|
2868 |
+
micromatch "^2.3.7"
|
2869 |
+
node-dir "0.1.8"
|
2870 |
+
nomnom "^1.8.1"
|
2871 |
+
recast "^0.12.5"
|
2872 |
+
temp "^0.8.1"
|
2873 |
+
write-file-atomic "^1.2.0"
|
2874 |
+
|
2875 |
+
jscodeshift@^0.5.0:
|
2876 |
+
version "0.5.0"
|
2877 |
+
resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.0.tgz#bdb7b6cc20dd62c16aa728c3fa2d2fe66ca7c748"
|
2878 |
+
dependencies:
|
2879 |
+
babel-plugin-transform-flow-strip-types "^6.8.0"
|
2880 |
+
babel-preset-es2015 "^6.9.0"
|
2881 |
+
babel-preset-stage-1 "^6.5.0"
|
2882 |
+
babel-register "^6.9.0"
|
2883 |
+
babylon "^7.0.0-beta.30"
|
2884 |
+
colors "^1.1.2"
|
2885 |
+
flow-parser "^0.*"
|
2886 |
+
lodash "^4.13.1"
|
2887 |
+
micromatch "^2.3.7"
|
2888 |
+
neo-async "^2.5.0"
|
2889 |
+
node-dir "0.1.8"
|
2890 |
+
nomnom "^1.8.1"
|
2891 |
+
recast "^0.14.1"
|
2892 |
+
temp "^0.8.1"
|
2893 |
+
write-file-atomic "^1.2.0"
|
2894 |
+
|
2895 |
+
jsesc@^1.3.0:
|
2896 |
+
version "1.3.0"
|
2897 |
+
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
|
2898 |
+
|
2899 |
+
jsesc@~0.5.0:
|
2900 |
+
version "0.5.0"
|
2901 |
+
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
|
2902 |
+
|
2903 |
+
json-buffer@3.0.0:
|
2904 |
+
version "3.0.0"
|
2905 |
+
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
|
2906 |
+
|
2907 |
+
json-parse-better-errors@^1.0.1:
|
2908 |
+
version "1.0.2"
|
2909 |
+
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
2910 |
+
|
2911 |
+
json-schema-traverse@^0.3.0:
|
2912 |
+
version "0.3.1"
|
2913 |
+
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
|
2914 |
+
|
2915 |
+
json-schema@0.2.3:
|
2916 |
+
version "0.2.3"
|
2917 |
+
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
2918 |
+
|
2919 |
+
json-stable-stringify@^1.0.1:
|
2920 |
+
version "1.0.1"
|
2921 |
+
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
|
2922 |
+
dependencies:
|
2923 |
+
jsonify "~0.0.0"
|
2924 |
+
|
2925 |
+
json-stringify-safe@~5.0.1:
|
2926 |
+
version "5.0.1"
|
2927 |
+
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
2928 |
+
|
2929 |
+
json5@^0.5.0, json5@^0.5.1:
|
2930 |
+
version "0.5.1"
|
2931 |
+
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
2932 |
+
|
2933 |
+
jsonfile@^4.0.0:
|
2934 |
+
version "4.0.0"
|
2935 |
+
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
|
2936 |
+
optionalDependencies:
|
2937 |
+
graceful-fs "^4.1.6"
|
2938 |
+
|
2939 |
+
jsonify@~0.0.0:
|
2940 |
+
version "0.0.0"
|
2941 |
+
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
|
2942 |
+
|
2943 |
+
jsprim@^1.2.2:
|
2944 |
+
version "1.4.1"
|
2945 |
+
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
2946 |
+
dependencies:
|
2947 |
+
assert-plus "1.0.0"
|
2948 |
+
extsprintf "1.3.0"
|
2949 |
+
json-schema "0.2.3"
|
2950 |
+
verror "1.10.0"
|
2951 |
+
|
2952 |
+
keyv@3.0.0:
|
2953 |
+
version "3.0.0"
|
2954 |
+
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
|
2955 |
+
dependencies:
|
2956 |
+
json-buffer "3.0.0"
|
2957 |
+
|
2958 |
+
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
|
2959 |
+
version "3.2.2"
|
2960 |
+
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
2961 |
+
dependencies:
|
2962 |
+
is-buffer "^1.1.5"
|
2963 |
+
|
2964 |
+
kind-of@^4.0.0:
|
2965 |
+
version "4.0.0"
|
2966 |
+
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
|
2967 |
+
dependencies:
|
2968 |
+
is-buffer "^1.1.5"
|
2969 |
+
|
2970 |
+
kind-of@^5.0.0:
|
2971 |
+
version "5.1.0"
|
2972 |
+
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
|
2973 |
+
|
2974 |
+
kind-of@^6.0.0, kind-of@^6.0.2:
|
2975 |
+
version "6.0.2"
|
2976 |
+
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
|
2977 |
+
|
2978 |
+
last-call-webpack-plugin@^3.0.0:
|
2979 |
+
version "3.0.0"
|
2980 |
+
resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
|
2981 |
+
dependencies:
|
2982 |
+
lodash "^4.17.5"
|
2983 |
+
webpack-sources "^1.1.0"
|
2984 |
+
|
2985 |
+
lcid@^1.0.0:
|
2986 |
+
version "1.0.0"
|
2987 |
+
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
2988 |
+
dependencies:
|
2989 |
+
invert-kv "^1.0.0"
|
2990 |
+
|
2991 |
+
listr-silent-renderer@^1.1.1:
|
2992 |
+
version "1.1.1"
|
2993 |
+
resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
|
2994 |
+
|
2995 |
+
listr-update-renderer@^0.4.0:
|
2996 |
+
version "0.4.0"
|
2997 |
+
resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7"
|
2998 |
+
dependencies:
|
2999 |
+
chalk "^1.1.3"
|
3000 |
+
cli-truncate "^0.2.1"
|
3001 |
+
elegant-spinner "^1.0.1"
|
3002 |
+
figures "^1.7.0"
|
3003 |
+
indent-string "^3.0.0"
|
3004 |
+
log-symbols "^1.0.2"
|
3005 |
+
log-update "^1.0.2"
|
3006 |
+
strip-ansi "^3.0.1"
|
3007 |
+
|
3008 |
+
listr-verbose-renderer@^0.4.0:
|
3009 |
+
version "0.4.1"
|
3010 |
+
resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35"
|
3011 |
+
dependencies:
|
3012 |
+
chalk "^1.1.3"
|
3013 |
+
cli-cursor "^1.0.2"
|
3014 |
+
date-fns "^1.27.2"
|
3015 |
+
figures "^1.7.0"
|
3016 |
+
|
3017 |
+
listr@^0.13.0:
|
3018 |
+
version "0.13.0"
|
3019 |
+
resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d"
|
3020 |
+
dependencies:
|
3021 |
+
chalk "^1.1.3"
|
3022 |
+
cli-truncate "^0.2.1"
|
3023 |
+
figures "^1.7.0"
|
3024 |
+
indent-string "^2.1.0"
|
3025 |
+
is-observable "^0.2.0"
|
3026 |
+
is-promise "^2.1.0"
|
3027 |
+
is-stream "^1.1.0"
|
3028 |
+
listr-silent-renderer "^1.1.1"
|
3029 |
+
listr-update-renderer "^0.4.0"
|
3030 |
+
listr-verbose-renderer "^0.4.0"
|
3031 |
+
log-symbols "^1.0.2"
|
3032 |
+
log-update "^1.0.2"
|
3033 |
+
ora "^0.2.3"
|
3034 |
+
p-map "^1.1.1"
|
3035 |
+
rxjs "^5.4.2"
|
3036 |
+
stream-to-observable "^0.2.0"
|
3037 |
+
strip-ansi "^3.0.1"
|
3038 |
+
|
3039 |
+
load-json-file@^4.0.0:
|
3040 |
+
version "4.0.0"
|
3041 |
+
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
3042 |
+
dependencies:
|
3043 |
+
graceful-fs "^4.1.2"
|
3044 |
+
parse-json "^4.0.0"
|
3045 |
+
pify "^3.0.0"
|
3046 |
+
strip-bom "^3.0.0"
|
3047 |
+
|
3048 |
+
loader-runner@^2.3.0:
|
3049 |
+
version "2.3.0"
|
3050 |
+
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
|
3051 |
+
|
3052 |
+
loader-utils@^1.0.2, loader-utils@^1.1.0:
|
3053 |
+
version "1.1.0"
|
3054 |
+
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
|
3055 |
+
dependencies:
|
3056 |
+
big.js "^3.1.3"
|
3057 |
+
emojis-list "^2.0.0"
|
3058 |
+
json5 "^0.5.0"
|
3059 |
+
|
3060 |
+
locate-path@^2.0.0:
|
3061 |
+
version "2.0.0"
|
3062 |
+
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
|
3063 |
+
dependencies:
|
3064 |
+
p-locate "^2.0.0"
|
3065 |
+
path-exists "^3.0.0"
|
3066 |
+
|
3067 |
+
lodash.camelcase@^4.3.0:
|
3068 |
+
version "4.3.0"
|
3069 |
+
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
3070 |
+
|
3071 |
+
lodash.memoize@^4.1.2:
|
3072 |
+
version "4.1.2"
|
3073 |
+
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
3074 |
+
|
3075 |
+
lodash.uniq@^4.5.0:
|
3076 |
+
version "4.5.0"
|
3077 |
+
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
3078 |
+
|
3079 |
+
lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
|
3080 |
+
version "4.17.5"
|
3081 |
+
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
|
3082 |
+
|
3083 |
+
log-symbols@^1.0.2:
|
3084 |
+
version "1.0.2"
|
3085 |
+
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
|
3086 |
+
dependencies:
|
3087 |
+
chalk "^1.0.0"
|
3088 |
+
|
3089 |
+
log-symbols@^2.1.0, log-symbols@^2.2.0:
|
3090 |
+
version "2.2.0"
|
3091 |
+
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
3092 |
+
dependencies:
|
3093 |
+
chalk "^2.0.1"
|
3094 |
+
|
3095 |
+
log-update@^1.0.2:
|
3096 |
+
version "1.0.2"
|
3097 |
+
resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
|
3098 |
+
dependencies:
|
3099 |
+
ansi-escapes "^1.0.0"
|
3100 |
+
cli-cursor "^1.0.2"
|
3101 |
+
|
3102 |
+
loose-envify@^1.0.0:
|
3103 |
+
version "1.3.1"
|
3104 |
+
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
|
3105 |
+
dependencies:
|
3106 |
+
js-tokens "^3.0.0"
|
3107 |
+
|
3108 |
+
lowercase-keys@1.0.0:
|
3109 |
+
version "1.0.0"
|
3110 |
+
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
|
3111 |
+
|
3112 |
+
lowercase-keys@^1.0.0:
|
3113 |
+
version "1.0.1"
|
3114 |
+
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
|
3115 |
+
|
3116 |
+
lru-cache@^4.0.1, lru-cache@^4.1.1:
|
3117 |
+
version "4.1.2"
|
3118 |
+
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f"
|
3119 |
+
dependencies:
|
3120 |
+
pseudomap "^1.0.2"
|
3121 |
+
yallist "^2.1.2"
|
3122 |
+
|
3123 |
+
macaddress@^0.2.8:
|
3124 |
+
version "0.2.8"
|
3125 |
+
resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
|
3126 |
+
|
3127 |
+
make-dir@^1.0.0, make-dir@^1.1.0:
|
3128 |
+
version "1.2.0"
|
3129 |
+
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
|
3130 |
+
dependencies:
|
3131 |
+
pify "^3.0.0"
|
3132 |
+
|
3133 |
+
map-cache@^0.2.2:
|
3134 |
+
version "0.2.2"
|
3135 |
+
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
|
3136 |
+
|
3137 |
+
map-visit@^1.0.0:
|
3138 |
+
version "1.0.0"
|
3139 |
+
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
|
3140 |
+
dependencies:
|
3141 |
+
object-visit "^1.0.0"
|
3142 |
+
|
3143 |
+
math-expression-evaluator@^1.2.14:
|
3144 |
+
version "1.2.17"
|
3145 |
+
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
|
3146 |
+
|
3147 |
+
md5.js@^1.3.4:
|
3148 |
+
version "1.3.4"
|
3149 |
+
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
|
3150 |
+
dependencies:
|
3151 |
+
hash-base "^3.0.0"
|
3152 |
+
inherits "^2.0.1"
|
3153 |
+
|
3154 |
+
mdn-data@^1.0.0:
|
3155 |
+
version "1.1.2"
|
3156 |
+
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.2.tgz#ceaa6a831b4de494352af984d301e3a8f2cad6e5"
|
3157 |
+
|
3158 |
+
mem-fs-editor@^3.0.2:
|
3159 |
+
version "3.0.2"
|
3160 |
+
resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f"
|
3161 |
+
dependencies:
|
3162 |
+
commondir "^1.0.1"
|
3163 |
+
deep-extend "^0.4.0"
|
3164 |
+
ejs "^2.3.1"
|
3165 |
+
glob "^7.0.3"
|
3166 |
+
globby "^6.1.0"
|
3167 |
+
mkdirp "^0.5.0"
|
3168 |
+
multimatch "^2.0.0"
|
3169 |
+
rimraf "^2.2.8"
|
3170 |
+
through2 "^2.0.0"
|
3171 |
+
vinyl "^2.0.1"
|
3172 |
+
|
3173 |
+
mem-fs@^1.1.0:
|
3174 |
+
version "1.1.3"
|
3175 |
+
resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc"
|
3176 |
+
dependencies:
|
3177 |
+
through2 "^2.0.0"
|
3178 |
+
vinyl "^1.1.0"
|
3179 |
+
vinyl-file "^2.0.0"
|
3180 |
+
|
3181 |
+
mem@^1.1.0:
|
3182 |
+
version "1.1.0"
|
3183 |
+
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
|
3184 |
+
dependencies:
|
3185 |
+
mimic-fn "^1.0.0"
|
3186 |
+
|
3187 |
+
memory-fs@^0.4.0, memory-fs@~0.4.1:
|
3188 |
+
version "0.4.1"
|
3189 |
+
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
|
3190 |
+
dependencies:
|
3191 |
+
errno "^0.1.3"
|
3192 |
+
readable-stream "^2.0.1"
|
3193 |
+
|
3194 |
+
micromatch@^2.3.7:
|
3195 |
+
version "2.3.11"
|
3196 |
+
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
|
3197 |
+
dependencies:
|
3198 |
+
arr-diff "^2.0.0"
|
3199 |
+
array-unique "^0.2.1"
|
3200 |
+
braces "^1.8.2"
|
3201 |
+
expand-brackets "^0.1.4"
|
3202 |
+
extglob "^0.3.1"
|
3203 |
+
filename-regex "^2.0.0"
|
3204 |
+
is-extglob "^1.0.0"
|
3205 |
+
is-glob "^2.0.1"
|
3206 |
+
kind-of "^3.0.2"
|
3207 |
+
normalize-path "^2.0.1"
|
3208 |
+
object.omit "^2.0.0"
|
3209 |
+
parse-glob "^3.0.4"
|
3210 |
+
regex-cache "^0.4.2"
|
3211 |
+
|
3212 |
+
micromatch@^3.1.4, micromatch@^3.1.8:
|
3213 |
+
version "3.1.10"
|
3214 |
+
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
|
3215 |
+
dependencies:
|
3216 |
+
arr-diff "^4.0.0"
|
3217 |
+
array-unique "^0.3.2"
|
3218 |
+
braces "^2.3.1"
|
3219 |
+
define-property "^2.0.2"
|
3220 |
+
extend-shallow "^3.0.2"
|
3221 |
+
extglob "^2.0.4"
|
3222 |
+
fragment-cache "^0.2.1"
|
3223 |
+
kind-of "^6.0.2"
|
3224 |
+
nanomatch "^1.2.9"
|
3225 |
+
object.pick "^1.3.0"
|
3226 |
+
regex-not "^1.0.0"
|
3227 |
+
snapdragon "^0.8.1"
|
3228 |
+
to-regex "^3.0.2"
|
3229 |
+
|
3230 |
+
miller-rabin@^4.0.0:
|
3231 |
+
version "4.0.1"
|
3232 |
+
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
|
3233 |
+
dependencies:
|
3234 |
+
bn.js "^4.0.0"
|
3235 |
+
brorand "^1.0.1"
|
3236 |
+
|
3237 |
+
mime-db@~1.33.0:
|
3238 |
+
version "1.33.0"
|
3239 |
+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
|
3240 |
+
|
3241 |
+
mime-types@^2.1.12, mime-types@~2.1.7:
|
3242 |
+
version "2.1.18"
|
3243 |
+
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
|
3244 |
+
dependencies:
|
3245 |
+
mime-db "~1.33.0"
|
3246 |
+
|
3247 |
+
mimic-fn@^1.0.0:
|
3248 |
+
version "1.2.0"
|
3249 |
+
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
3250 |
+
|
3251 |
+
mimic-response@^1.0.0:
|
3252 |
+
version "1.0.0"
|
3253 |
+
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
|
3254 |
+
|
3255 |
+
minimalistic-assert@^1.0.0:
|
3256 |
+
version "1.0.1"
|
3257 |
+
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
3258 |
+
|
3259 |
+
minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
3260 |
+
version "1.0.1"
|
3261 |
+
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
3262 |
+
|
3263 |
+
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
|
3264 |
+
version "3.0.4"
|
3265 |
+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
3266 |
+
dependencies:
|
3267 |
+
brace-expansion "^1.1.7"
|
3268 |
+
|
3269 |
+
minimist@0.0.8:
|
3270 |
+
version "0.0.8"
|
3271 |
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
3272 |
+
|
3273 |
+
minimist@^0.1.0:
|
3274 |
+
version "0.1.0"
|
3275 |
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de"
|
3276 |
+
|
3277 |
+
minimist@^1.2.0:
|
3278 |
+
version "1.2.0"
|
3279 |
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
3280 |
+
|
3281 |
+
mississippi@^2.0.0:
|
3282 |
+
version "2.0.0"
|
3283 |
+
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
|
3284 |
+
dependencies:
|
3285 |
+
concat-stream "^1.5.0"
|
3286 |
+
duplexify "^3.4.2"
|
3287 |
+
end-of-stream "^1.1.0"
|
3288 |
+
flush-write-stream "^1.0.0"
|
3289 |
+
from2 "^2.1.0"
|
3290 |
+
parallel-transform "^1.1.0"
|
3291 |
+
pump "^2.0.1"
|
3292 |
+
pumpify "^1.3.3"
|
3293 |
+
stream-each "^1.1.0"
|
3294 |
+
through2 "^2.0.0"
|
3295 |
+
|
3296 |
+
mixin-deep@^1.2.0:
|
3297 |
+
version "1.3.1"
|
3298 |
+
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
|
3299 |
+
dependencies:
|
3300 |
+
for-in "^1.0.2"
|
3301 |
+
is-extendable "^1.0.1"
|
3302 |
+
|
3303 |
+
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
|
3304 |
+
version "0.5.1"
|
3305 |
+
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
3306 |
+
dependencies:
|
3307 |
+
minimist "0.0.8"
|
3308 |
+
|
3309 |
+
move-concurrently@^1.0.1:
|
3310 |
+
version "1.0.1"
|
3311 |
+
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
|
3312 |
+
dependencies:
|
3313 |
+
aproba "^1.1.1"
|
3314 |
+
copy-concurrently "^1.0.0"
|
3315 |
+
fs-write-stream-atomic "^1.0.8"
|
3316 |
+
mkdirp "^0.5.1"
|
3317 |
+
rimraf "^2.5.4"
|
3318 |
+
run-queue "^1.0.3"
|
3319 |
+
|
3320 |
+
ms@2.0.0:
|
3321 |
+
version "2.0.0"
|
3322 |
+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
3323 |
+
|
3324 |
+
multimatch@^2.0.0:
|
3325 |
+
version "2.1.0"
|
3326 |
+
resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
|
3327 |
+
dependencies:
|
3328 |
+
array-differ "^1.0.0"
|
3329 |
+
array-union "^1.0.1"
|
3330 |
+
arrify "^1.0.0"
|
3331 |
+
minimatch "^3.0.0"
|
3332 |
+
|
3333 |
+
mute-stream@0.0.7:
|
3334 |
+
version "0.0.7"
|
3335 |
+
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
3336 |
+
|
3337 |
+
nan@^2.3.0:
|
3338 |
+
version "2.10.0"
|
3339 |
+
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
|
3340 |
+
|
3341 |
+
nanomatch@^1.2.9:
|
3342 |
+
version "1.2.9"
|
3343 |
+
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2"
|
3344 |
+
dependencies:
|
3345 |
+
arr-diff "^4.0.0"
|
3346 |
+
array-unique "^0.3.2"
|
3347 |
+
define-property "^2.0.2"
|
3348 |
+
extend-shallow "^3.0.2"
|
3349 |
+
fragment-cache "^0.2.1"
|
3350 |
+
is-odd "^2.0.0"
|
3351 |
+
is-windows "^1.0.2"
|
3352 |
+
kind-of "^6.0.2"
|
3353 |
+
object.pick "^1.3.0"
|
3354 |
+
regex-not "^1.0.0"
|
3355 |
+
snapdragon "^0.8.1"
|
3356 |
+
to-regex "^3.0.1"
|
3357 |
+
|
3358 |
+
neo-async@^2.5.0:
|
3359 |
+
version "2.5.1"
|
3360 |
+
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee"
|
3361 |
+
|
3362 |
+
nice-try@^1.0.4:
|
3363 |
+
version "1.0.4"
|
3364 |
+
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4"
|
3365 |
+
|
3366 |
+
node-dir@0.1.8:
|
3367 |
+
version "0.1.8"
|
3368 |
+
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d"
|
3369 |
+
|
3370 |
+
node-libs-browser@^2.0.0:
|
3371 |
+
version "2.1.0"
|
3372 |
+
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
|
3373 |
+
dependencies:
|
3374 |
+
assert "^1.1.1"
|
3375 |
+
browserify-zlib "^0.2.0"
|
3376 |
+
buffer "^4.3.0"
|
3377 |
+
console-browserify "^1.1.0"
|
3378 |
+
constants-browserify "^1.0.0"
|
3379 |
+
crypto-browserify "^3.11.0"
|
3380 |
+
domain-browser "^1.1.1"
|
3381 |
+
events "^1.0.0"
|
3382 |
+
https-browserify "^1.0.0"
|
3383 |
+
os-browserify "^0.3.0"
|
3384 |
+
path-browserify "0.0.0"
|
3385 |
+
process "^0.11.10"
|
3386 |
+
punycode "^1.2.4"
|
3387 |
+
querystring-es3 "^0.2.0"
|
3388 |
+
readable-stream "^2.3.3"
|
3389 |
+
stream-browserify "^2.0.1"
|
3390 |
+
stream-http "^2.7.2"
|
3391 |
+
string_decoder "^1.0.0"
|
3392 |
+
timers-browserify "^2.0.4"
|
3393 |
+
tty-browserify "0.0.0"
|
3394 |
+
url "^0.11.0"
|
3395 |
+
util "^0.10.3"
|
3396 |
+
vm-browserify "0.0.4"
|
3397 |
+
|
3398 |
+
node-pre-gyp@^0.6.39:
|
3399 |
+
version "0.6.39"
|
3400 |
+
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
|
3401 |
+
dependencies:
|
3402 |
+
detect-libc "^1.0.2"
|
3403 |
+
hawk "3.1.3"
|
3404 |
+
mkdirp "^0.5.1"
|
3405 |
+
nopt "^4.0.1"
|
3406 |
+
npmlog "^4.0.2"
|
3407 |
+
rc "^1.1.7"
|
3408 |
+
request "2.81.0"
|
3409 |
+
rimraf "^2.6.1"
|
3410 |
+
semver "^5.3.0"
|
3411 |
+
tar "^2.2.1"
|
3412 |
+
tar-pack "^3.4.0"
|
3413 |
+
|
3414 |
+
nomnom@^1.8.1:
|
3415 |
+
version "1.8.1"
|
3416 |
+
resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7"
|
3417 |
+
dependencies:
|
3418 |
+
chalk "~0.4.0"
|
3419 |
+
underscore "~1.6.0"
|
3420 |
+
|
3421 |
+
nopt@^4.0.1:
|
3422 |
+
version "4.0.1"
|
3423 |
+
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
|
3424 |
+
dependencies:
|
3425 |
+
abbrev "1"
|
3426 |
+
osenv "^0.1.4"
|
3427 |
+
|
3428 |
+
normalize-package-data@^2.3.2:
|
3429 |
+
version "2.4.0"
|
3430 |
+
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
|
3431 |
+
dependencies:
|
3432 |
+
hosted-git-info "^2.1.4"
|
3433 |
+
is-builtin-module "^1.0.0"
|
3434 |
+
semver "2 || 3 || 4 || 5"
|
3435 |
+
validate-npm-package-license "^3.0.1"
|
3436 |
+
|
3437 |
+
normalize-path@^2.0.1, normalize-path@^2.1.1:
|
3438 |
+
version "2.1.1"
|
3439 |
+
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
|
3440 |
+
dependencies:
|
3441 |
+
remove-trailing-separator "^1.0.1"
|
3442 |
+
|
3443 |
+
normalize-range@^0.1.2:
|
3444 |
+
version "0.1.2"
|
3445 |
+
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
|
3446 |
+
|
3447 |
+
normalize-url@2.0.1:
|
3448 |
+
version "2.0.1"
|
3449 |
+
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
|
3450 |
+
dependencies:
|
3451 |
+
prepend-http "^2.0.0"
|
3452 |
+
query-string "^5.0.1"
|
3453 |
+
sort-keys "^2.0.0"
|
3454 |
+
|
3455 |
+
normalize-url@^1.4.0:
|
3456 |
+
version "1.9.1"
|
3457 |
+
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
|
3458 |
+
dependencies:
|
3459 |
+
object-assign "^4.0.1"
|
3460 |
+
prepend-http "^1.0.0"
|
3461 |
+
query-string "^4.1.0"
|
3462 |
+
sort-keys "^1.0.0"
|
3463 |
+
|
3464 |
+
npm-run-path@^2.0.0:
|
3465 |
+
version "2.0.2"
|
3466 |
+
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
3467 |
+
dependencies:
|
3468 |
+
path-key "^2.0.0"
|
3469 |
+
|
3470 |
+
npmlog@^4.0.2:
|
3471 |
+
version "4.1.2"
|
3472 |
+
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
3473 |
+
dependencies:
|
3474 |
+
are-we-there-yet "~1.1.2"
|
3475 |
+
console-control-strings "~1.1.0"
|
3476 |
+
gauge "~2.7.3"
|
3477 |
+
set-blocking "~2.0.0"
|
3478 |
+
|
3479 |
+
num2fraction@^1.2.2:
|
3480 |
+
version "1.2.2"
|
3481 |
+
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
|
3482 |
+
|
3483 |
+
number-is-nan@^1.0.0:
|
3484 |
+
version "1.0.1"
|
3485 |
+
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
3486 |
+
|
3487 |
+
oauth-sign@~0.8.1:
|
3488 |
+
version "0.8.2"
|
3489 |
+
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
3490 |
+
|
3491 |
+
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
3492 |
+
version "4.1.1"
|
3493 |
+
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
3494 |
+
|
3495 |
+
object-copy@^0.1.0:
|
3496 |
+
version "0.1.0"
|
3497 |
+
resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
|
3498 |
+
dependencies:
|
3499 |
+
copy-descriptor "^0.1.0"
|
3500 |
+
define-property "^0.2.5"
|
3501 |
+
kind-of "^3.0.3"
|
3502 |
+
|
3503 |
+
object-visit@^1.0.0:
|
3504 |
+
version "1.0.1"
|
3505 |
+
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
|
3506 |
+
dependencies:
|
3507 |
+
isobject "^3.0.0"
|
3508 |
+
|
3509 |
+
object.omit@^2.0.0:
|
3510 |
+
version "2.0.1"
|
3511 |
+
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
|
3512 |
+
dependencies:
|
3513 |
+
for-own "^0.1.4"
|
3514 |
+
is-extendable "^0.1.1"
|
3515 |
+
|
3516 |
+
object.pick@^1.3.0:
|
3517 |
+
version "1.3.0"
|
3518 |
+
resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
|
3519 |
+
dependencies:
|
3520 |
+
isobject "^3.0.1"
|
3521 |
+
|
3522 |
+
once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
|
3523 |
+
version "1.4.0"
|
3524 |
+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
3525 |
+
dependencies:
|
3526 |
+
wrappy "1"
|
3527 |
+
|
3528 |
+
onetime@^1.0.0:
|
3529 |
+
version "1.1.0"
|
3530 |
+
resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
|
3531 |
+
|
3532 |
+
onetime@^2.0.0:
|
3533 |
+
version "2.0.1"
|
3534 |
+
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
3535 |
+
dependencies:
|
3536 |
+
mimic-fn "^1.0.0"
|
3537 |
+
|
3538 |
+
optimize-css-assets-webpack-plugin@^4.0.0:
|
3539 |
+
version "4.0.0"
|
3540 |
+
resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.0.tgz#d5f80041fb1391b358a1f35273c3b53de814e8fe"
|
3541 |
+
dependencies:
|
3542 |
+
cssnano "^3.4.0"
|
3543 |
+
last-call-webpack-plugin "^3.0.0"
|
3544 |
+
|
3545 |
+
ora@^0.2.3:
|
3546 |
+
version "0.2.3"
|
3547 |
+
resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
|
3548 |
+
dependencies:
|
3549 |
+
chalk "^1.1.1"
|
3550 |
+
cli-cursor "^1.0.2"
|
3551 |
+
cli-spinners "^0.1.2"
|
3552 |
+
object-assign "^4.0.1"
|
3553 |
+
|
3554 |
+
os-browserify@^0.3.0:
|
3555 |
+
version "0.3.0"
|
3556 |
+
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
|
3557 |
+
|
3558 |
+
os-homedir@^1.0.0, os-homedir@^1.0.1:
|
3559 |
+
version "1.0.2"
|
3560 |
+
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
3561 |
+
|
3562 |
+
os-locale@^2.0.0:
|
3563 |
+
version "2.1.0"
|
3564 |
+
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
|
3565 |
+
dependencies:
|
3566 |
+
execa "^0.7.0"
|
3567 |
+
lcid "^1.0.0"
|
3568 |
+
mem "^1.1.0"
|
3569 |
+
|
3570 |
+
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
|
3571 |
+
version "1.0.2"
|
3572 |
+
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
3573 |
+
|
3574 |
+
osenv@^0.1.4:
|
3575 |
+
version "0.1.5"
|
3576 |
+
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
|
3577 |
+
dependencies:
|
3578 |
+
os-homedir "^1.0.0"
|
3579 |
+
os-tmpdir "^1.0.0"
|
3580 |
+
|
3581 |
+
p-cancelable@^0.3.0:
|
3582 |
+
version "0.3.0"
|
3583 |
+
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
|
3584 |
+
|
3585 |
+
p-cancelable@^0.4.0:
|
3586 |
+
version "0.4.1"
|
3587 |
+
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
|
3588 |
+
|
3589 |
+
p-each-series@^1.0.0:
|
3590 |
+
version "1.0.0"
|
3591 |
+
resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
|
3592 |
+
dependencies:
|
3593 |
+
p-reduce "^1.0.0"
|
3594 |
+
|
3595 |
+
p-finally@^1.0.0:
|
3596 |
+
version "1.0.0"
|
3597 |
+
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
3598 |
+
|
3599 |
+
p-is-promise@^1.1.0:
|
3600 |
+
version "1.1.0"
|
3601 |
+
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
|
3602 |
+
|
3603 |
+
p-lazy@^1.0.0:
|
3604 |
+
version "1.0.0"
|
3605 |
+
resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835"
|
3606 |
+
|
3607 |
+
p-limit@^1.1.0:
|
3608 |
+
version "1.2.0"
|
3609 |
+
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
|
3610 |
+
dependencies:
|
3611 |
+
p-try "^1.0.0"
|
3612 |
+
|
3613 |
+
p-locate@^2.0.0:
|
3614 |
+
version "2.0.0"
|
3615 |
+
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
3616 |
+
dependencies:
|
3617 |
+
p-limit "^1.1.0"
|
3618 |
+
|
3619 |
+
p-map@^1.1.1:
|
3620 |
+
version "1.2.0"
|
3621 |
+
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
|
3622 |
+
|
3623 |
+
p-reduce@^1.0.0:
|
3624 |
+
version "1.0.0"
|
3625 |
+
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
|
3626 |
+
|
3627 |
+
p-timeout@^1.1.1:
|
3628 |
+
version "1.2.1"
|
3629 |
+
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
|
3630 |
+
dependencies:
|
3631 |
+
p-finally "^1.0.0"
|
3632 |
+
|
3633 |
+
p-timeout@^2.0.1:
|
3634 |
+
version "2.0.1"
|
3635 |
+
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038"
|
3636 |
+
dependencies:
|
3637 |
+
p-finally "^1.0.0"
|
3638 |
+
|
3639 |
+
p-try@^1.0.0:
|
3640 |
+
version "1.0.0"
|
3641 |
+
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
3642 |
+
|
3643 |
+
pako@~1.0.5:
|
3644 |
+
version "1.0.6"
|
3645 |
+
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
|
3646 |
+
|
3647 |
+
parallel-transform@^1.1.0:
|
3648 |
+
version "1.1.0"
|
3649 |
+
resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
|
3650 |
+
dependencies:
|
3651 |
+
cyclist "~0.2.2"
|
3652 |
+
inherits "^2.0.3"
|
3653 |
+
readable-stream "^2.1.5"
|
3654 |
+
|
3655 |
+
parse-asn1@^5.0.0:
|
3656 |
+
version "5.1.1"
|
3657 |
+
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8"
|
3658 |
+
dependencies:
|
3659 |
+
asn1.js "^4.0.0"
|
3660 |
+
browserify-aes "^1.0.0"
|
3661 |
+
create-hash "^1.1.0"
|
3662 |
+
evp_bytestokey "^1.0.0"
|
3663 |
+
pbkdf2 "^3.0.3"
|
3664 |
+
|
3665 |
+
parse-glob@^3.0.4:
|
3666 |
+
version "3.0.4"
|
3667 |
+
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
|
3668 |
+
dependencies:
|
3669 |
+
glob-base "^0.3.0"
|
3670 |
+
is-dotfile "^1.0.0"
|
3671 |
+
is-extglob "^1.0.0"
|
3672 |
+
is-glob "^2.0.0"
|
3673 |
+
|
3674 |
+
parse-json@^2.2.0:
|
3675 |
+
version "2.2.0"
|
3676 |
+
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
|
3677 |
+
dependencies:
|
3678 |
+
error-ex "^1.2.0"
|
3679 |
+
|
3680 |
+
parse-json@^4.0.0:
|
3681 |
+
version "4.0.0"
|
3682 |
+
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
3683 |
+
dependencies:
|
3684 |
+
error-ex "^1.3.1"
|
3685 |
+
json-parse-better-errors "^1.0.1"
|
3686 |
+
|
3687 |
+
parse-passwd@^1.0.0:
|
3688 |
+
version "1.0.0"
|
3689 |
+
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
|
3690 |
+
|
3691 |
+
pascalcase@^0.1.1:
|
3692 |
+
version "0.1.1"
|
3693 |
+
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
3694 |
+
|
3695 |
+
path-browserify@0.0.0:
|
3696 |
+
version "0.0.0"
|
3697 |
+
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
|
3698 |
+
|
3699 |
+
path-dirname@^1.0.0:
|
3700 |
+
version "1.0.2"
|
3701 |
+
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
3702 |
+
|
3703 |
+
path-exists@^3.0.0:
|
3704 |
+
version "3.0.0"
|
3705 |
+
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
3706 |
+
|
3707 |
+
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
|
3708 |
+
version "1.0.1"
|
3709 |
+
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
3710 |
+
|
3711 |
+
path-key@^2.0.0, path-key@^2.0.1:
|
3712 |
+
version "2.0.1"
|
3713 |
+
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
3714 |
+
|
3715 |
+
path-parse@^1.0.5:
|
3716 |
+
version "1.0.5"
|
3717 |
+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
|
3718 |
+
|
3719 |
+
path-type@^3.0.0:
|
3720 |
+
version "3.0.0"
|
3721 |
+
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
3722 |
+
dependencies:
|
3723 |
+
pify "^3.0.0"
|
3724 |
+
|
3725 |
+
pbkdf2@^3.0.3:
|
3726 |
+
version "3.0.14"
|
3727 |
+
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
|
3728 |
+
dependencies:
|
3729 |
+
create-hash "^1.1.2"
|
3730 |
+
create-hmac "^1.1.4"
|
3731 |
+
ripemd160 "^2.0.1"
|
3732 |
+
safe-buffer "^5.0.1"
|
3733 |
+
sha.js "^2.4.8"
|
3734 |
+
|
3735 |
+
perfectionist@^2.4.0:
|
3736 |
+
version "2.4.0"
|
3737 |
+
resolved "https://registry.yarnpkg.com/perfectionist/-/perfectionist-2.4.0.tgz#c147ad3714e126467f1764129ee72df861d47ea0"
|
3738 |
+
dependencies:
|
3739 |
+
comment-regex "^1.0.0"
|
3740 |
+
defined "^1.0.0"
|
3741 |
+
minimist "^1.2.0"
|
3742 |
+
postcss "^5.0.8"
|
3743 |
+
postcss-scss "^0.3.0"
|
3744 |
+
postcss-value-parser "^3.3.0"
|
3745 |
+
read-file-stdin "^0.2.0"
|
3746 |
+
string.prototype.repeat "^0.2.0"
|
3747 |
+
vendors "^1.0.0"
|
3748 |
+
write-file-stdout "0.0.2"
|
3749 |
+
|
3750 |
+
performance-now@^0.2.0:
|
3751 |
+
version "0.2.0"
|
3752 |
+
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
|
3753 |
+
|
3754 |
+
pify@^2.0.0, pify@^2.3.0:
|
3755 |
+
version "2.3.0"
|
3756 |
+
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
3757 |
+
|
3758 |
+
pify@^3.0.0:
|
3759 |
+
version "3.0.0"
|
3760 |
+
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
3761 |
+
|
3762 |
+
pinkie-promise@^2.0.0:
|
3763 |
+
version "2.0.1"
|
3764 |
+
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
3765 |
+
dependencies:
|
3766 |
+
pinkie "^2.0.0"
|
3767 |
+
|
3768 |
+
pinkie@^2.0.0:
|
3769 |
+
version "2.0.4"
|
3770 |
+
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
3771 |
+
|
3772 |
+
pkg-dir@^2.0.0:
|
3773 |
+
version "2.0.0"
|
3774 |
+
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
3775 |
+
dependencies:
|
3776 |
+
find-up "^2.1.0"
|
3777 |
+
|
3778 |
+
posix-character-classes@^0.1.0:
|
3779 |
+
version "0.1.1"
|
3780 |
+
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
3781 |
+
|
3782 |
+
postcss-calc@^5.2.0:
|
3783 |
+
version "5.3.1"
|
3784 |
+
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
|
3785 |
+
dependencies:
|
3786 |
+
postcss "^5.0.2"
|
3787 |
+
postcss-message-helpers "^2.0.0"
|
3788 |
+
reduce-css-calc "^1.2.6"
|
3789 |
+
|
3790 |
+
postcss-colormin@^2.1.8:
|
3791 |
+
version "2.2.2"
|
3792 |
+
resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
|
3793 |
+
dependencies:
|
3794 |
+
colormin "^1.0.5"
|
3795 |
+
postcss "^5.0.13"
|
3796 |
+
postcss-value-parser "^3.2.3"
|
3797 |
+
|
3798 |
+
postcss-convert-values@^2.3.4:
|
3799 |
+
version "2.6.1"
|
3800 |
+
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
|
3801 |
+
dependencies:
|
3802 |
+
postcss "^5.0.11"
|
3803 |
+
postcss-value-parser "^3.1.2"
|
3804 |
+
|
3805 |
+
postcss-csso@^3.0.0:
|
3806 |
+
version "3.0.0"
|
3807 |
+
resolved "https://registry.yarnpkg.com/postcss-csso/-/postcss-csso-3.0.0.tgz#7473e72f1ec9a098545e36cc93658153704d6881"
|
3808 |
+
dependencies:
|
3809 |
+
csso "~3.3.0"
|
3810 |
+
postcss "^6.0.0"
|
3811 |
+
|
3812 |
+
postcss-discard-comments@^2.0.4:
|
3813 |
+
version "2.0.4"
|
3814 |
+
resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
|
3815 |
+
dependencies:
|
3816 |
+
postcss "^5.0.14"
|
3817 |
+
|
3818 |
+
postcss-discard-duplicates@^2.0.1:
|
3819 |
+
version "2.1.0"
|
3820 |
+
resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
|
3821 |
+
dependencies:
|
3822 |
+
postcss "^5.0.4"
|
3823 |
+
|
3824 |
+
postcss-discard-empty@^2.0.1:
|
3825 |
+
version "2.1.0"
|
3826 |
+
resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
|
3827 |
+
dependencies:
|
3828 |
+
postcss "^5.0.14"
|
3829 |
+
|
3830 |
+
postcss-discard-overridden@^0.1.1:
|
3831 |
+
version "0.1.1"
|
3832 |
+
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
|
3833 |
+
dependencies:
|
3834 |
+
postcss "^5.0.16"
|
3835 |
+
|
3836 |
+
postcss-discard-unused@^2.2.1:
|
3837 |
+
version "2.2.3"
|
3838 |
+
resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
|
3839 |
+
dependencies:
|
3840 |
+
postcss "^5.0.14"
|
3841 |
+
uniqs "^2.0.0"
|
3842 |
+
|
3843 |
+
postcss-filter-plugins@^2.0.0:
|
3844 |
+
version "2.0.2"
|
3845 |
+
resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
|
3846 |
+
dependencies:
|
3847 |
+
postcss "^5.0.4"
|
3848 |
+
uniqid "^4.0.0"
|
3849 |
+
|
3850 |
+
postcss-functions@^3.0.0:
|
3851 |
+
version "3.0.0"
|
3852 |
+
resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e"
|
3853 |
+
dependencies:
|
3854 |
+
glob "^7.1.2"
|
3855 |
+
object-assign "^4.1.1"
|
3856 |
+
postcss "^6.0.9"
|
3857 |
+
postcss-value-parser "^3.3.0"
|
3858 |
+
|
3859 |
+
postcss-import@^11.1.0:
|
3860 |
+
version "11.1.0"
|
3861 |
+
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.1.0.tgz#55c9362c9192994ec68865d224419df1db2981f0"
|
3862 |
+
dependencies:
|
3863 |
+
postcss "^6.0.1"
|
3864 |
+
postcss-value-parser "^3.2.3"
|
3865 |
+
read-cache "^1.0.0"
|
3866 |
+
resolve "^1.1.7"
|
3867 |
+
|
3868 |
+
postcss-js@^1.0.1:
|
3869 |
+
version "1.0.1"
|
3870 |
+
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b"
|
3871 |
+
dependencies:
|
3872 |
+
camelcase-css "^1.0.1"
|
3873 |
+
postcss "^6.0.11"
|
3874 |
+
|
3875 |
+
postcss-load-config@^1.2.0:
|
3876 |
+
version "1.2.0"
|
3877 |
+
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
|
3878 |
+
dependencies:
|
3879 |
+
cosmiconfig "^2.1.0"
|
3880 |
+
object-assign "^4.1.0"
|
3881 |
+
postcss-load-options "^1.2.0"
|
3882 |
+
postcss-load-plugins "^2.3.0"
|
3883 |
+
|
3884 |
+
postcss-load-options@^1.2.0:
|
3885 |
+
version "1.2.0"
|
3886 |
+
resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
|
3887 |
+
dependencies:
|
3888 |
+
cosmiconfig "^2.1.0"
|
3889 |
+
object-assign "^4.1.0"
|
3890 |
+
|
3891 |
+
postcss-load-plugins@^2.3.0:
|
3892 |
+
version "2.3.0"
|
3893 |
+
resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
|
3894 |
+
dependencies:
|
3895 |
+
cosmiconfig "^2.1.1"
|
3896 |
+
object-assign "^4.1.0"
|
3897 |
+
|
3898 |
+
postcss-loader@^2.1.3:
|
3899 |
+
version "2.1.3"
|
3900 |
+
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.3.tgz#eb210da734e475a244f76ccd61f9860f5bb3ee09"
|
3901 |
+
dependencies:
|
3902 |
+
loader-utils "^1.1.0"
|
3903 |
+
postcss "^6.0.0"
|
3904 |
+
postcss-load-config "^1.2.0"
|
3905 |
+
schema-utils "^0.4.0"
|
3906 |
+
|
3907 |
+
postcss-merge-idents@^2.1.5:
|
3908 |
+
version "2.1.7"
|
3909 |
+
resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
|
3910 |
+
dependencies:
|
3911 |
+
has "^1.0.1"
|
3912 |
+
postcss "^5.0.10"
|
3913 |
+
postcss-value-parser "^3.1.1"
|
3914 |
+
|
3915 |
+
postcss-merge-longhand@^2.0.1:
|
3916 |
+
version "2.0.2"
|
3917 |
+
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
|
3918 |
+
dependencies:
|
3919 |
+
postcss "^5.0.4"
|
3920 |
+
|
3921 |
+
postcss-merge-rules@^2.0.3:
|
3922 |
+
version "2.1.2"
|
3923 |
+
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
|
3924 |
+
dependencies:
|
3925 |
+
browserslist "^1.5.2"
|
3926 |
+
caniuse-api "^1.5.2"
|
3927 |
+
postcss "^5.0.4"
|
3928 |
+
postcss-selector-parser "^2.2.2"
|
3929 |
+
vendors "^1.0.0"
|
3930 |
+
|
3931 |
+
postcss-message-helpers@^2.0.0:
|
3932 |
+
version "2.0.0"
|
3933 |
+
resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
|
3934 |
+
|
3935 |
+
postcss-minify-font-values@^1.0.2:
|
3936 |
+
version "1.0.5"
|
3937 |
+
resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
|
3938 |
+
dependencies:
|
3939 |
+
object-assign "^4.0.1"
|
3940 |
+
postcss "^5.0.4"
|
3941 |
+
postcss-value-parser "^3.0.2"
|
3942 |
+
|
3943 |
+
postcss-minify-gradients@^1.0.1:
|
3944 |
+
version "1.0.5"
|
3945 |
+
resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
|
3946 |
+
dependencies:
|
3947 |
+
postcss "^5.0.12"
|
3948 |
+
postcss-value-parser "^3.3.0"
|
3949 |
+
|
3950 |
+
postcss-minify-params@^1.0.4:
|
3951 |
+
version "1.2.2"
|
3952 |
+
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
|
3953 |
+
dependencies:
|
3954 |
+
alphanum-sort "^1.0.1"
|
3955 |
+
postcss "^5.0.2"
|
3956 |
+
postcss-value-parser "^3.0.2"
|
3957 |
+
uniqs "^2.0.0"
|
3958 |
+
|
3959 |
+
postcss-minify-selectors@^2.0.4:
|
3960 |
+
version "2.1.1"
|
3961 |
+
resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
|
3962 |
+
dependencies:
|
3963 |
+
alphanum-sort "^1.0.2"
|
3964 |
+
has "^1.0.1"
|
3965 |
+
postcss "^5.0.14"
|
3966 |
+
postcss-selector-parser "^2.0.0"
|
3967 |
+
|
3968 |
+
postcss-modules-extract-imports@^1.2.0:
|
3969 |
+
version "1.2.0"
|
3970 |
+
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
|
3971 |
+
dependencies:
|
3972 |
+
postcss "^6.0.1"
|
3973 |
+
|
3974 |
+
postcss-modules-local-by-default@^1.2.0:
|
3975 |
+
version "1.2.0"
|
3976 |
+
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
|
3977 |
+
dependencies:
|
3978 |
+
css-selector-tokenizer "^0.7.0"
|
3979 |
+
postcss "^6.0.1"
|
3980 |
+
|
3981 |
+
postcss-modules-scope@^1.1.0:
|
3982 |
+
version "1.1.0"
|
3983 |
+
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
|
3984 |
+
dependencies:
|
3985 |
+
css-selector-tokenizer "^0.7.0"
|
3986 |
+
postcss "^6.0.1"
|
3987 |
+
|
3988 |
+
postcss-modules-values@^1.3.0:
|
3989 |
+
version "1.3.0"
|
3990 |
+
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
|
3991 |
+
dependencies:
|
3992 |
+
icss-replace-symbols "^1.1.0"
|
3993 |
+
postcss "^6.0.1"
|
3994 |
+
|
3995 |
+
postcss-nested@^3.0.0:
|
3996 |
+
version "3.0.0"
|
3997 |
+
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-3.0.0.tgz#cde40bd07a078565f3df72e2dc2665871c724852"
|
3998 |
+
dependencies:
|
3999 |
+
postcss "^6.0.14"
|
4000 |
+
postcss-selector-parser "^3.1.1"
|
4001 |
+
|
4002 |
+
postcss-normalize-charset@^1.1.0:
|
4003 |
+
version "1.1.1"
|
4004 |
+
resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
|
4005 |
+
dependencies:
|
4006 |
+
postcss "^5.0.5"
|
4007 |
+
|
4008 |
+
postcss-normalize-url@^3.0.7:
|
4009 |
+
version "3.0.8"
|
4010 |
+
resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
|
4011 |
+
dependencies:
|
4012 |
+
is-absolute-url "^2.0.0"
|
4013 |
+
normalize-url "^1.4.0"
|
4014 |
+
postcss "^5.0.14"
|
4015 |
+
postcss-value-parser "^3.2.3"
|
4016 |
+
|
4017 |
+
postcss-ordered-values@^2.1.0:
|
4018 |
+
version "2.2.3"
|
4019 |
+
resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
|
4020 |
+
dependencies:
|
4021 |
+
postcss "^5.0.4"
|
4022 |
+
postcss-value-parser "^3.0.1"
|
4023 |
+
|
4024 |
+
postcss-reduce-idents@^2.2.2:
|
4025 |
+
version "2.4.0"
|
4026 |
+
resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
|
4027 |
+
dependencies:
|
4028 |
+
postcss "^5.0.4"
|
4029 |
+
postcss-value-parser "^3.0.2"
|
4030 |
+
|
4031 |
+
postcss-reduce-initial@^1.0.0:
|
4032 |
+
version "1.0.1"
|
4033 |
+
resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
|
4034 |
+
dependencies:
|
4035 |
+
postcss "^5.0.4"
|
4036 |
+
|
4037 |
+
postcss-reduce-transforms@^1.0.3:
|
4038 |
+
version "1.0.4"
|
4039 |
+
resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
|
4040 |
+
dependencies:
|
4041 |
+
has "^1.0.1"
|
4042 |
+
postcss "^5.0.8"
|
4043 |
+
postcss-value-parser "^3.0.1"
|
4044 |
+
|
4045 |
+
postcss-scss@^0.3.0:
|
4046 |
+
version "0.3.1"
|
4047 |
+
resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.3.1.tgz#65c610d8e2a7ee0e62b1835b71b8870734816e4b"
|
4048 |
+
dependencies:
|
4049 |
+
postcss "^5.2.4"
|
4050 |
+
|
4051 |
+
postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
|
4052 |
+
version "2.2.3"
|
4053 |
+
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
|
4054 |
+
dependencies:
|
4055 |
+
flatten "^1.0.2"
|
4056 |
+
indexes-of "^1.0.1"
|
4057 |
+
uniq "^1.0.1"
|
4058 |
+
|
4059 |
+
postcss-selector-parser@^3.1.1:
|
4060 |
+
version "3.1.1"
|
4061 |
+
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
|
4062 |
+
dependencies:
|
4063 |
+
dot-prop "^4.1.1"
|
4064 |
+
indexes-of "^1.0.1"
|
4065 |
+
uniq "^1.0.1"
|
4066 |
+
|
4067 |
+
postcss-svgo@^2.1.1:
|
4068 |
+
version "2.1.6"
|
4069 |
+
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
|
4070 |
+
dependencies:
|
4071 |
+
is-svg "^2.0.0"
|
4072 |
+
postcss "^5.0.14"
|
4073 |
+
postcss-value-parser "^3.2.3"
|
4074 |
+
svgo "^0.7.0"
|
4075 |
+
|
4076 |
+
postcss-unique-selectors@^2.0.2:
|
4077 |
+
version "2.0.2"
|
4078 |
+
resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
|
4079 |
+
dependencies:
|
4080 |
+
alphanum-sort "^1.0.1"
|
4081 |
+
postcss "^5.0.4"
|
4082 |
+
uniqs "^2.0.0"
|
4083 |
+
|
4084 |
+
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:
|
4085 |
+
version "3.3.0"
|
4086 |
+
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
|
4087 |
+
|
4088 |
+
postcss-zindex@^2.0.1:
|
4089 |
+
version "2.2.0"
|
4090 |
+
resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
|
4091 |
+
dependencies:
|
4092 |
+
has "^1.0.1"
|
4093 |
+
postcss "^5.0.4"
|
4094 |
+
uniqs "^2.0.0"
|
4095 |
+
|
4096 |
+
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, postcss@^5.2.4:
|
4097 |
+
version "5.2.18"
|
4098 |
+
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
|
4099 |
+
dependencies:
|
4100 |
+
chalk "^1.1.3"
|
4101 |
+
js-base64 "^2.1.9"
|
4102 |
+
source-map "^0.5.6"
|
4103 |
+
supports-color "^3.2.3"
|
4104 |
+
|
4105 |
+
postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.20, postcss@^6.0.21, postcss@^6.0.9:
|
4106 |
+
version "6.0.21"
|
4107 |
+
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d"
|
4108 |
+
dependencies:
|
4109 |
+
chalk "^2.3.2"
|
4110 |
+
source-map "^0.6.1"
|
4111 |
+
supports-color "^5.3.0"
|
4112 |
+
|
4113 |
+
prepend-http@^1.0.0, prepend-http@^1.0.1:
|
4114 |
+
version "1.0.4"
|
4115 |
+
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
4116 |
+
|
4117 |
+
prepend-http@^2.0.0:
|
4118 |
+
version "2.0.0"
|
4119 |
+
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
|
4120 |
+
|
4121 |
+
preserve@^0.2.0:
|
4122 |
+
version "0.2.0"
|
4123 |
+
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
|
4124 |
+
|
4125 |
+
prettier@^1.5.3:
|
4126 |
+
version "1.12.0"
|
4127 |
+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.0.tgz#d26fc5894b9230de97629b39cae225b503724ce8"
|
4128 |
+
|
4129 |
+
pretty-bytes@^4.0.2:
|
4130 |
+
version "4.0.2"
|
4131 |
+
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
|
4132 |
+
|
4133 |
+
private@^0.1.6, private@^0.1.7, private@~0.1.5:
|
4134 |
+
version "0.1.8"
|
4135 |
+
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
4136 |
+
|
4137 |
+
process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
|
4138 |
+
version "2.0.0"
|
4139 |
+
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
4140 |
+
|
4141 |
+
process@^0.11.10:
|
4142 |
+
version "0.11.10"
|
4143 |
+
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
4144 |
+
|
4145 |
+
promise-inflight@^1.0.1:
|
4146 |
+
version "1.0.1"
|
4147 |
+
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
4148 |
+
|
4149 |
+
prr@~1.0.1:
|
4150 |
+
version "1.0.1"
|
4151 |
+
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
4152 |
+
|
4153 |
+
pseudomap@^1.0.2:
|
4154 |
+
version "1.0.2"
|
4155 |
+
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
4156 |
+
|
4157 |
+
public-encrypt@^4.0.0:
|
4158 |
+
version "4.0.2"
|
4159 |
+
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994"
|
4160 |
+
dependencies:
|
4161 |
+
bn.js "^4.1.0"
|
4162 |
+
browserify-rsa "^4.0.0"
|
4163 |
+
create-hash "^1.1.0"
|
4164 |
+
parse-asn1 "^5.0.0"
|
4165 |
+
randombytes "^2.0.1"
|
4166 |
+
|
4167 |
+
pump@^2.0.0, pump@^2.0.1:
|
4168 |
+
version "2.0.1"
|
4169 |
+
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
4170 |
+
dependencies:
|
4171 |
+
end-of-stream "^1.1.0"
|
4172 |
+
once "^1.3.1"
|
4173 |
+
|
4174 |
+
pumpify@^1.3.3:
|
4175 |
+
version "1.4.0"
|
4176 |
+
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb"
|
4177 |
+
dependencies:
|
4178 |
+
duplexify "^3.5.3"
|
4179 |
+
inherits "^2.0.3"
|
4180 |
+
pump "^2.0.0"
|
4181 |
+
|
4182 |
+
punycode@1.3.2:
|
4183 |
+
version "1.3.2"
|
4184 |
+
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
|
4185 |
+
|
4186 |
+
punycode@^1.2.4, punycode@^1.4.1:
|
4187 |
+
version "1.4.1"
|
4188 |
+
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
4189 |
+
|
4190 |
+
punycode@^2.1.0:
|
4191 |
+
version "2.1.0"
|
4192 |
+
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
|
4193 |
+
|
4194 |
+
purgecss-webpack-plugin@^0.22.0:
|
4195 |
+
version "0.22.0"
|
4196 |
+
resolved "https://registry.yarnpkg.com/purgecss-webpack-plugin/-/purgecss-webpack-plugin-0.22.0.tgz#b1e7e1a6b798678552097a6e0cae34b11f81f1ac"
|
4197 |
+
dependencies:
|
4198 |
+
eslint-plugin-html "^4.0.2"
|
4199 |
+
purgecss "^0.21.0"
|
4200 |
+
webpack-sources "^1.1.0"
|
4201 |
+
|
4202 |
+
purgecss@^0.21.0:
|
4203 |
+
version "0.21.0"
|
4204 |
+
resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-0.21.0.tgz#64e62668ef11c9bc03d233843ad7006e1dfe578d"
|
4205 |
+
dependencies:
|
4206 |
+
glob "^7.1.2"
|
4207 |
+
postcss "^6.0.20"
|
4208 |
+
postcss-selector-parser "^3.1.1"
|
4209 |
+
yargs "^11.1.0"
|
4210 |
+
|
4211 |
+
q@^1.1.2:
|
4212 |
+
version "1.5.1"
|
4213 |
+
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
4214 |
+
|
4215 |
+
qs@~6.4.0:
|
4216 |
+
version "6.4.0"
|
4217 |
+
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
|
4218 |
+
|
4219 |
+
query-string@^4.1.0:
|
4220 |
+
version "4.3.4"
|
4221 |
+
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
|
4222 |
+
dependencies:
|
4223 |
+
object-assign "^4.1.0"
|
4224 |
+
strict-uri-encode "^1.0.0"
|
4225 |
+
|
4226 |
+
query-string@^5.0.1:
|
4227 |
+
version "5.1.1"
|
4228 |
+
resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
|
4229 |
+
dependencies:
|
4230 |
+
decode-uri-component "^0.2.0"
|
4231 |
+
object-assign "^4.1.0"
|
4232 |
+
strict-uri-encode "^1.0.0"
|
4233 |
+
|
4234 |
+
querystring-es3@^0.2.0:
|
4235 |
+
version "0.2.1"
|
4236 |
+
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
4237 |
+
|
4238 |
+
querystring@0.2.0:
|
4239 |
+
version "0.2.0"
|
4240 |
+
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
|
4241 |
+
|
4242 |
+
randomatic@^1.1.3:
|
4243 |
+
version "1.1.7"
|
4244 |
+
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
|
4245 |
+
dependencies:
|
4246 |
+
is-number "^3.0.0"
|
4247 |
+
kind-of "^4.0.0"
|
4248 |
+
|
4249 |
+
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
|
4250 |
+
version "2.0.6"
|
4251 |
+
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
|
4252 |
+
dependencies:
|
4253 |
+
safe-buffer "^5.1.0"
|
4254 |
+
|
4255 |
+
randomfill@^1.0.3:
|
4256 |
+
version "1.0.4"
|
4257 |
+
resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
|
4258 |
+
dependencies:
|
4259 |
+
randombytes "^2.0.5"
|
4260 |
+
safe-buffer "^5.1.0"
|
4261 |
+
|
4262 |
+
rc@^1.1.7:
|
4263 |
+
version "1.2.6"
|
4264 |
+
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092"
|
4265 |
+
dependencies:
|
4266 |
+
deep-extend "~0.4.0"
|
4267 |
+
ini "~1.3.0"
|
4268 |
+
minimist "^1.2.0"
|
4269 |
+
strip-json-comments "~2.0.1"
|
4270 |
+
|
4271 |
+
read-cache@^1.0.0:
|
4272 |
+
version "1.0.0"
|
4273 |
+
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
|
4274 |
+
dependencies:
|
4275 |
+
pify "^2.3.0"
|
4276 |
+
|
4277 |
+
read-chunk@^2.1.0:
|
4278 |
+
version "2.1.0"
|
4279 |
+
resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655"
|
4280 |
+
dependencies:
|
4281 |
+
pify "^3.0.0"
|
4282 |
+
safe-buffer "^5.1.1"
|
4283 |
+
|
4284 |
+
read-file-stdin@^0.2.0:
|
4285 |
+
version "0.2.1"
|
4286 |
+
resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61"
|
4287 |
+
dependencies:
|
4288 |
+
gather-stream "^1.0.0"
|
4289 |
+
|
4290 |
+
read-pkg-up@^3.0.0:
|
4291 |
+
version "3.0.0"
|
4292 |
+
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
|
4293 |
+
dependencies:
|
4294 |
+
find-up "^2.0.0"
|
4295 |
+
read-pkg "^3.0.0"
|
4296 |
+
|
4297 |
+
read-pkg@^3.0.0:
|
4298 |
+
version "3.0.0"
|
4299 |
+
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
4300 |
+
dependencies:
|
4301 |
+
load-json-file "^4.0.0"
|
4302 |
+
normalize-package-data "^2.3.2"
|
4303 |
+
path-type "^3.0.0"
|
4304 |
+
|
4305 |
+
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5:
|
4306 |
+
version "2.3.6"
|
4307 |
+
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
4308 |
+
dependencies:
|
4309 |
+
core-util-is "~1.0.0"
|
4310 |
+
inherits "~2.0.3"
|
4311 |
+
isarray "~1.0.0"
|
4312 |
+
process-nextick-args "~2.0.0"
|
4313 |
+
safe-buffer "~5.1.1"
|
4314 |
+
string_decoder "~1.1.1"
|
4315 |
+
util-deprecate "~1.0.1"
|
4316 |
+
|
4317 |
+
readdirp@^2.0.0:
|
4318 |
+
version "2.1.0"
|
4319 |
+
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
|
4320 |
+
dependencies:
|
4321 |
+
graceful-fs "^4.1.2"
|
4322 |
+
minimatch "^3.0.2"
|
4323 |
+
readable-stream "^2.0.2"
|
4324 |
+
set-immediate-shim "^1.0.1"
|
4325 |
+
|
4326 |
+
recast@^0.12.5:
|
4327 |
+
version "0.12.9"
|
4328 |
+
resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1"
|
4329 |
+
dependencies:
|
4330 |
+
ast-types "0.10.1"
|
4331 |
+
core-js "^2.4.1"
|
4332 |
+
esprima "~4.0.0"
|
4333 |
+
private "~0.1.5"
|
4334 |
+
source-map "~0.6.1"
|
4335 |
+
|
4336 |
+
recast@^0.14.1:
|
4337 |
+
version "0.14.7"
|
4338 |
+
resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d"
|
4339 |
+
dependencies:
|
4340 |
+
ast-types "0.11.3"
|
4341 |
+
esprima "~4.0.0"
|
4342 |
+
private "~0.1.5"
|
4343 |
+
source-map "~0.6.1"
|
4344 |
+
|
4345 |
+
rechoir@^0.6.2:
|
4346 |
+
version "0.6.2"
|
4347 |
+
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
4348 |
+
dependencies:
|
4349 |
+
resolve "^1.1.6"
|
4350 |
+
|
4351 |
+
reduce-css-calc@^1.2.6:
|
4352 |
+
version "1.3.0"
|
4353 |
+
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
|
4354 |
+
dependencies:
|
4355 |
+
balanced-match "^0.4.2"
|
4356 |
+
math-expression-evaluator "^1.2.14"
|
4357 |
+
reduce-function-call "^1.0.1"
|
4358 |
+
|
4359 |
+
reduce-function-call@^1.0.1:
|
4360 |
+
version "1.0.2"
|
4361 |
+
resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
|
4362 |
+
dependencies:
|
4363 |
+
balanced-match "^0.4.2"
|
4364 |
+
|
4365 |
+
regenerate@^1.2.1:
|
4366 |
+
version "1.3.3"
|
4367 |
+
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
|
4368 |
+
|
4369 |
+
regenerator-runtime@^0.11.0:
|
4370 |
+
version "0.11.1"
|
4371 |
+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
|
4372 |
+
|
4373 |
+
regenerator-transform@^0.10.0:
|
4374 |
+
version "0.10.1"
|
4375 |
+
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
|
4376 |
+
dependencies:
|
4377 |
+
babel-runtime "^6.18.0"
|
4378 |
+
babel-types "^6.19.0"
|
4379 |
+
private "^0.1.6"
|
4380 |
+
|
4381 |
+
regex-cache@^0.4.2:
|
4382 |
+
version "0.4.4"
|
4383 |
+
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
|
4384 |
+
dependencies:
|
4385 |
+
is-equal-shallow "^0.1.3"
|
4386 |
+
|
4387 |
+
regex-not@^1.0.0, regex-not@^1.0.2:
|
4388 |
+
version "1.0.2"
|
4389 |
+
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
|
4390 |
+
dependencies:
|
4391 |
+
extend-shallow "^3.0.2"
|
4392 |
+
safe-regex "^1.1.0"
|
4393 |
+
|
4394 |
+
regexpu-core@^1.0.0:
|
4395 |
+
version "1.0.0"
|
4396 |
+
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
|
4397 |
+
dependencies:
|
4398 |
+
regenerate "^1.2.1"
|
4399 |
+
regjsgen "^0.2.0"
|
4400 |
+
regjsparser "^0.1.4"
|
4401 |
+
|
4402 |
+
regexpu-core@^2.0.0:
|
4403 |
+
version "2.0.0"
|
4404 |
+
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
|
4405 |
+
dependencies:
|
4406 |
+
regenerate "^1.2.1"
|
4407 |
+
regjsgen "^0.2.0"
|
4408 |
+
regjsparser "^0.1.4"
|
4409 |
+
|
4410 |
+
regjsgen@^0.2.0:
|
4411 |
+
version "0.2.0"
|
4412 |
+
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
|
4413 |
+
|
4414 |
+
regjsparser@^0.1.4:
|
4415 |
+
version "0.1.5"
|
4416 |
+
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
|
4417 |
+
dependencies:
|
4418 |
+
jsesc "~0.5.0"
|
4419 |
+
|
4420 |
+
remove-trailing-separator@^1.0.1:
|
4421 |
+
version "1.1.0"
|
4422 |
+
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
|
4423 |
+
|
4424 |
+
repeat-element@^1.1.2:
|
4425 |
+
version "1.1.2"
|
4426 |
+
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
|
4427 |
+
|
4428 |
+
repeat-string@^1.5.2, repeat-string@^1.6.1:
|
4429 |
+
version "1.6.1"
|
4430 |
+
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
4431 |
+
|
4432 |
+
repeating@^2.0.0:
|
4433 |
+
version "2.0.1"
|
4434 |
+
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
|
4435 |
+
dependencies:
|
4436 |
+
is-finite "^1.0.0"
|
4437 |
+
|
4438 |
+
replace-ext@0.0.1:
|
4439 |
+
version "0.0.1"
|
4440 |
+
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
|
4441 |
+
|
4442 |
+
replace-ext@^1.0.0:
|
4443 |
+
version "1.0.0"
|
4444 |
+
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
|
4445 |
+
|
4446 |
+
request@2.81.0:
|
4447 |
+
version "2.81.0"
|
4448 |
+
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
|
4449 |
+
dependencies:
|
4450 |
+
aws-sign2 "~0.6.0"
|
4451 |
+
aws4 "^1.2.1"
|
4452 |
+
caseless "~0.12.0"
|
4453 |
+
combined-stream "~1.0.5"
|
4454 |
+
extend "~3.0.0"
|
4455 |
+
forever-agent "~0.6.1"
|
4456 |
+
form-data "~2.1.1"
|
4457 |
+
har-validator "~4.2.1"
|
4458 |
+
hawk "~3.1.3"
|
4459 |
+
http-signature "~1.1.0"
|
4460 |
+
is-typedarray "~1.0.0"
|
4461 |
+
isstream "~0.1.2"
|
4462 |
+
json-stringify-safe "~5.0.1"
|
4463 |
+
mime-types "~2.1.7"
|
4464 |
+
oauth-sign "~0.8.1"
|
4465 |
+
performance-now "^0.2.0"
|
4466 |
+
qs "~6.4.0"
|
4467 |
+
safe-buffer "^5.0.1"
|
4468 |
+
stringstream "~0.0.4"
|
4469 |
+
tough-cookie "~2.3.0"
|
4470 |
+
tunnel-agent "^0.6.0"
|
4471 |
+
uuid "^3.0.0"
|
4472 |
+
|
4473 |
+
require-directory@^2.1.1:
|
4474 |
+
version "2.1.1"
|
4475 |
+
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
4476 |
+
|
4477 |
+
require-from-string@^1.1.0:
|
4478 |
+
version "1.2.1"
|
4479 |
+
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
|
4480 |
+
|
4481 |
+
require-main-filename@^1.0.1:
|
4482 |
+
version "1.0.1"
|
4483 |
+
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
4484 |
+
|
4485 |
+
resolve-cwd@^2.0.0:
|
4486 |
+
version "2.0.0"
|
4487 |
+
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
|
4488 |
+
dependencies:
|
4489 |
+
resolve-from "^3.0.0"
|
4490 |
+
|
4491 |
+
resolve-dir@^1.0.0:
|
4492 |
+
version "1.0.1"
|
4493 |
+
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
|
4494 |
+
dependencies:
|
4495 |
+
expand-tilde "^2.0.0"
|
4496 |
+
global-modules "^1.0.0"
|
4497 |
+
|
4498 |
+
resolve-from@^3.0.0:
|
4499 |
+
version "3.0.0"
|
4500 |
+
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
|
4501 |
+
|
4502 |
+
resolve-url@^0.2.1:
|
4503 |
+
version "0.2.1"
|
4504 |
+
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
4505 |
+
|
4506 |
+
resolve@^1.1.6, resolve@^1.1.7:
|
4507 |
+
version "1.7.1"
|
4508 |
+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
|
4509 |
+
dependencies:
|
4510 |
+
path-parse "^1.0.5"
|
4511 |
+
|
4512 |
+
responselike@1.0.2:
|
4513 |
+
version "1.0.2"
|
4514 |
+
resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
|
4515 |
+
dependencies:
|
4516 |
+
lowercase-keys "^1.0.0"
|
4517 |
+
|
4518 |
+
restore-cursor@^1.0.1:
|
4519 |
+
version "1.0.1"
|
4520 |
+
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
|
4521 |
+
dependencies:
|
4522 |
+
exit-hook "^1.0.0"
|
4523 |
+
onetime "^1.0.0"
|
4524 |
+
|
4525 |
+
restore-cursor@^2.0.0:
|
4526 |
+
version "2.0.0"
|
4527 |
+
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
4528 |
+
dependencies:
|
4529 |
+
onetime "^2.0.0"
|
4530 |
+
signal-exit "^3.0.2"
|
4531 |
+
|
4532 |
+
ret@~0.1.10:
|
4533 |
+
version "0.1.15"
|
4534 |
+
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
4535 |
+
|
4536 |
+
rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
|
4537 |
+
version "2.6.2"
|
4538 |
+
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
4539 |
+
dependencies:
|
4540 |
+
glob "^7.0.5"
|
4541 |
+
|
4542 |
+
rimraf@~2.2.6:
|
4543 |
+
version "2.2.8"
|
4544 |
+
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
|
4545 |
+
|
4546 |
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
|
4547 |
+
version "2.0.1"
|
4548 |
+
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
|
4549 |
+
dependencies:
|
4550 |
+
hash-base "^2.0.0"
|
4551 |
+
inherits "^2.0.1"
|
4552 |
+
|
4553 |
+
run-async@^2.0.0, run-async@^2.2.0:
|
4554 |
+
version "2.3.0"
|
4555 |
+
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
|
4556 |
+
dependencies:
|
4557 |
+
is-promise "^2.1.0"
|
4558 |
+
|
4559 |
+
run-queue@^1.0.0, run-queue@^1.0.3:
|
4560 |
+
version "1.0.3"
|
4561 |
+
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
|
4562 |
+
dependencies:
|
4563 |
+
aproba "^1.1.1"
|
4564 |
+
|
4565 |
+
rx-lite-aggregates@^4.0.8:
|
4566 |
+
version "4.0.8"
|
4567 |
+
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
|
4568 |
+
dependencies:
|
4569 |
+
rx-lite "*"
|
4570 |
+
|
4571 |
+
rx-lite@*, rx-lite@^4.0.8:
|
4572 |
+
version "4.0.8"
|
4573 |
+
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
|
4574 |
+
|
4575 |
+
rxjs@^5.4.2, rxjs@^5.5.2:
|
4576 |
+
version "5.5.10"
|
4577 |
+
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.10.tgz#fde02d7a614f6c8683d0d1957827f492e09db045"
|
4578 |
+
dependencies:
|
4579 |
+
symbol-observable "1.0.1"
|
4580 |
+
|
4581 |
+
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
4582 |
+
version "5.1.1"
|
4583 |
+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
|
4584 |
+
|
4585 |
+
safe-regex@^1.1.0:
|
4586 |
+
version "1.1.0"
|
4587 |
+
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
|
4588 |
+
dependencies:
|
4589 |
+
ret "~0.1.10"
|
4590 |
+
|
4591 |
+
safer-buffer@^2.1.0:
|
4592 |
+
version "2.1.2"
|
4593 |
+
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
4594 |
+
|
4595 |
+
sax@~1.2.1:
|
4596 |
+
version "1.2.4"
|
4597 |
+
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
4598 |
+
|
4599 |
+
schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.5:
|
4600 |
+
version "0.4.5"
|
4601 |
+
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
|
4602 |
+
dependencies:
|
4603 |
+
ajv "^6.1.0"
|
4604 |
+
ajv-keywords "^3.1.0"
|
4605 |
+
|
4606 |
+
scoped-regex@^1.0.0:
|
4607 |
+
version "1.0.0"
|
4608 |
+
resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8"
|
4609 |
+
|
4610 |
+
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0:
|
4611 |
+
version "5.5.0"
|
4612 |
+
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
4613 |
+
|
4614 |
+
serialize-javascript@^1.4.0:
|
4615 |
+
version "1.4.0"
|
4616 |
+
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005"
|
4617 |
+
|
4618 |
+
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
4619 |
+
version "2.0.0"
|
4620 |
+
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
4621 |
+
|
4622 |
+
set-immediate-shim@^1.0.1:
|
4623 |
+
version "1.0.1"
|
4624 |
+
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
|
4625 |
+
|
4626 |
+
set-value@^0.4.3:
|
4627 |
+
version "0.4.3"
|
4628 |
+
resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
|
4629 |
+
dependencies:
|
4630 |
+
extend-shallow "^2.0.1"
|
4631 |
+
is-extendable "^0.1.1"
|
4632 |
+
is-plain-object "^2.0.1"
|
4633 |
+
to-object-path "^0.3.0"
|
4634 |
+
|
4635 |
+
set-value@^2.0.0:
|
4636 |
+
version "2.0.0"
|
4637 |
+
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
|
4638 |
+
dependencies:
|
4639 |
+
extend-shallow "^2.0.1"
|
4640 |
+
is-extendable "^0.1.1"
|
4641 |
+
is-plain-object "^2.0.3"
|
4642 |
+
split-string "^3.0.1"
|
4643 |
+
|
4644 |
+
setimmediate@^1.0.4:
|
4645 |
+
version "1.0.5"
|
4646 |
+
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
4647 |
+
|
4648 |
+
sha.js@^2.4.0, sha.js@^2.4.8:
|
4649 |
+
version "2.4.11"
|
4650 |
+
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
4651 |
+
dependencies:
|
4652 |
+
inherits "^2.0.1"
|
4653 |
+
safe-buffer "^5.0.1"
|
4654 |
+
|
4655 |
+
shebang-command@^1.2.0:
|
4656 |
+
version "1.2.0"
|
4657 |
+
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
4658 |
+
dependencies:
|
4659 |
+
shebang-regex "^1.0.0"
|
4660 |
+
|
4661 |
+
shebang-regex@^1.0.0:
|
4662 |
+
version "1.0.0"
|
4663 |
+
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
4664 |
+
|
4665 |
+
shelljs@^0.8.0:
|
4666 |
+
version "0.8.1"
|
4667 |
+
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.1.tgz#729e038c413a2254c4078b95ed46e0397154a9f1"
|
4668 |
+
dependencies:
|
4669 |
+
glob "^7.0.0"
|
4670 |
+
interpret "^1.0.0"
|
4671 |
+
rechoir "^0.6.2"
|
4672 |
+
|
4673 |
+
signal-exit@^3.0.0, signal-exit@^3.0.2:
|
4674 |
+
version "3.0.2"
|
4675 |
+
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
4676 |
+
|
4677 |
+
slash@^1.0.0:
|
4678 |
+
version "1.0.0"
|
4679 |
+
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
4680 |
+
|
4681 |
+
slice-ansi@0.0.4:
|
4682 |
+
version "0.0.4"
|
4683 |
+
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
|
4684 |
+
|
4685 |
+
slide@^1.1.5:
|
4686 |
+
version "1.1.6"
|
4687 |
+
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
|
4688 |
+
|
4689 |
+
snapdragon-node@^2.0.1:
|
4690 |
+
version "2.1.1"
|
4691 |
+
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
4692 |
+
dependencies:
|
4693 |
+
define-property "^1.0.0"
|
4694 |
+
isobject "^3.0.0"
|
4695 |
+
snapdragon-util "^3.0.1"
|
4696 |
+
|
4697 |
+
snapdragon-util@^3.0.1:
|
4698 |
+
version "3.0.1"
|
4699 |
+
resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
|
4700 |
+
dependencies:
|
4701 |
+
kind-of "^3.2.0"
|
4702 |
+
|
4703 |
+
snapdragon@^0.8.1:
|
4704 |
+
version "0.8.2"
|
4705 |
+
resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
|
4706 |
+
dependencies:
|
4707 |
+
base "^0.11.1"
|
4708 |
+
debug "^2.2.0"
|
4709 |
+
define-property "^0.2.5"
|
4710 |
+
extend-shallow "^2.0.1"
|
4711 |
+
map-cache "^0.2.2"
|
4712 |
+
source-map "^0.5.6"
|
4713 |
+
source-map-resolve "^0.5.0"
|
4714 |
+
use "^3.1.0"
|
4715 |
+
|
4716 |
+
sntp@1.x.x:
|
4717 |
+
version "1.0.9"
|
4718 |
+
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
|
4719 |
+
dependencies:
|
4720 |
+
hoek "2.x.x"
|
4721 |
+
|
4722 |
+
sort-keys@^1.0.0:
|
4723 |
+
version "1.1.2"
|
4724 |
+
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
|
4725 |
+
dependencies:
|
4726 |
+
is-plain-obj "^1.0.0"
|
4727 |
+
|
4728 |
+
sort-keys@^2.0.0:
|
4729 |
+
version "2.0.0"
|
4730 |
+
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
|
4731 |
+
dependencies:
|
4732 |
+
is-plain-obj "^1.0.0"
|
4733 |
+
|
4734 |
+
source-list-map@^2.0.0:
|
4735 |
+
version "2.0.0"
|
4736 |
+
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
|
4737 |
+
|
4738 |
+
source-map-resolve@^0.5.0:
|
4739 |
+
version "0.5.1"
|
4740 |
+
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
|
4741 |
+
dependencies:
|
4742 |
+
atob "^2.0.0"
|
4743 |
+
decode-uri-component "^0.2.0"
|
4744 |
+
resolve-url "^0.2.1"
|
4745 |
+
source-map-url "^0.4.0"
|
4746 |
+
urix "^0.1.0"
|
4747 |
+
|
4748 |
+
source-map-support@^0.4.15:
|
4749 |
+
version "0.4.18"
|
4750 |
+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
|
4751 |
+
dependencies:
|
4752 |
+
source-map "^0.5.6"
|
4753 |
+
|
4754 |
+
source-map-url@^0.4.0:
|
4755 |
+
version "0.4.0"
|
4756 |
+
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
|
4757 |
+
|
4758 |
+
source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
|
4759 |
+
version "0.5.7"
|
4760 |
+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
4761 |
+
|
4762 |
+
source-map@^0.6.1, source-map@~0.6.1:
|
4763 |
+
version "0.6.1"
|
4764 |
+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
4765 |
+
|
4766 |
+
spdx-correct@^3.0.0:
|
4767 |
+
version "3.0.0"
|
4768 |
+
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
|
4769 |
+
dependencies:
|
4770 |
+
spdx-expression-parse "^3.0.0"
|
4771 |
+
spdx-license-ids "^3.0.0"
|
4772 |
+
|
4773 |
+
spdx-exceptions@^2.1.0:
|
4774 |
+
version "2.1.0"
|
4775 |
+
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
|
4776 |
+
|
4777 |
+
spdx-expression-parse@^3.0.0:
|
4778 |
+
version "3.0.0"
|
4779 |
+
resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
|
4780 |
+
dependencies:
|
4781 |
+
spdx-exceptions "^2.1.0"
|
4782 |
+
spdx-license-ids "^3.0.0"
|
4783 |
+
|
4784 |
+
spdx-license-ids@^3.0.0:
|
4785 |
+
version "3.0.0"
|
4786 |
+
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
|
4787 |
+
|
4788 |
+
split-string@^3.0.1, split-string@^3.0.2:
|
4789 |
+
version "3.1.0"
|
4790 |
+
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
|
4791 |
+
dependencies:
|
4792 |
+
extend-shallow "^3.0.0"
|
4793 |
+
|
4794 |
+
sprintf-js@~1.0.2:
|
4795 |
+
version "1.0.3"
|
4796 |
+
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
4797 |
+
|
4798 |
+
sshpk@^1.7.0:
|
4799 |
+
version "1.14.1"
|
4800 |
+
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
|
4801 |
+
dependencies:
|
4802 |
+
asn1 "~0.2.3"
|
4803 |
+
assert-plus "^1.0.0"
|
4804 |
+
dashdash "^1.12.0"
|
4805 |
+
getpass "^0.1.1"
|
4806 |
+
optionalDependencies:
|
4807 |
+
bcrypt-pbkdf "^1.0.0"
|
4808 |
+
ecc-jsbn "~0.1.1"
|
4809 |
+
jsbn "~0.1.0"
|
4810 |
+
tweetnacl "~0.14.0"
|
4811 |
+
|
4812 |
+
ssri@^5.2.4:
|
4813 |
+
version "5.3.0"
|
4814 |
+
resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
|
4815 |
+
dependencies:
|
4816 |
+
safe-buffer "^5.1.1"
|
4817 |
+
|
4818 |
+
static-extend@^0.1.1:
|
4819 |
+
version "0.1.2"
|
4820 |
+
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
|
4821 |
+
dependencies:
|
4822 |
+
define-property "^0.2.5"
|
4823 |
+
object-copy "^0.1.0"
|
4824 |
+
|
4825 |
+
stream-browserify@^2.0.1:
|
4826 |
+
version "2.0.1"
|
4827 |
+
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
|
4828 |
+
dependencies:
|
4829 |
+
inherits "~2.0.1"
|
4830 |
+
readable-stream "^2.0.2"
|
4831 |
+
|
4832 |
+
stream-each@^1.1.0:
|
4833 |
+
version "1.2.2"
|
4834 |
+
resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd"
|
4835 |
+
dependencies:
|
4836 |
+
end-of-stream "^1.1.0"
|
4837 |
+
stream-shift "^1.0.0"
|
4838 |
+
|
4839 |
+
stream-http@^2.7.2:
|
4840 |
+
version "2.8.1"
|
4841 |
+
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4"
|
4842 |
+
dependencies:
|
4843 |
+
builtin-status-codes "^3.0.0"
|
4844 |
+
inherits "^2.0.1"
|
4845 |
+
readable-stream "^2.3.3"
|
4846 |
+
to-arraybuffer "^1.0.0"
|
4847 |
+
xtend "^4.0.0"
|
4848 |
+
|
4849 |
+
stream-shift@^1.0.0:
|
4850 |
+
version "1.0.0"
|
4851 |
+
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
|
4852 |
+
|
4853 |
+
stream-to-observable@^0.2.0:
|
4854 |
+
version "0.2.0"
|
4855 |
+
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10"
|
4856 |
+
dependencies:
|
4857 |
+
any-observable "^0.2.0"
|
4858 |
+
|
4859 |
+
strict-uri-encode@^1.0.0:
|
4860 |
+
version "1.1.0"
|
4861 |
+
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
|
4862 |
+
|
4863 |
+
string-template@~0.2.1:
|
4864 |
+
version "0.2.1"
|
4865 |
+
resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
|
4866 |
+
|
4867 |
+
string-width@^1.0.1, string-width@^1.0.2:
|
4868 |
+
version "1.0.2"
|
4869 |
+
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
4870 |
+
dependencies:
|
4871 |
+
code-point-at "^1.0.0"
|
4872 |
+
is-fullwidth-code-point "^1.0.0"
|
4873 |
+
strip-ansi "^3.0.0"
|
4874 |
+
|
4875 |
+
string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
|
4876 |
+
version "2.1.1"
|
4877 |
+
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
4878 |
+
dependencies:
|
4879 |
+
is-fullwidth-code-point "^2.0.0"
|
4880 |
+
strip-ansi "^4.0.0"
|
4881 |
+
|
4882 |
+
string.prototype.repeat@^0.2.0:
|
4883 |
+
version "0.2.0"
|
4884 |
+
resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf"
|
4885 |
+
|
4886 |
+
string_decoder@^1.0.0, string_decoder@~1.1.1:
|
4887 |
+
version "1.1.1"
|
4888 |
+
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
4889 |
+
dependencies:
|
4890 |
+
safe-buffer "~5.1.0"
|
4891 |
+
|
4892 |
+
stringstream@~0.0.4:
|
4893 |
+
version "0.0.5"
|
4894 |
+
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
|
4895 |
+
|
4896 |
+
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
4897 |
+
version "3.0.1"
|
4898 |
+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
4899 |
+
dependencies:
|
4900 |
+
ansi-regex "^2.0.0"
|
4901 |
+
|
4902 |
+
strip-ansi@^4.0.0:
|
4903 |
+
version "4.0.0"
|
4904 |
+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
4905 |
+
dependencies:
|
4906 |
+
ansi-regex "^3.0.0"
|
4907 |
+
|
4908 |
+
strip-ansi@~0.1.0:
|
4909 |
+
version "0.1.1"
|
4910 |
+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
|
4911 |
+
|
4912 |
+
strip-bom-stream@^2.0.0:
|
4913 |
+
version "2.0.0"
|
4914 |
+
resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca"
|
4915 |
+
dependencies:
|
4916 |
+
first-chunk-stream "^2.0.0"
|
4917 |
+
strip-bom "^2.0.0"
|
4918 |
+
|
4919 |
+
strip-bom@^2.0.0:
|
4920 |
+
version "2.0.0"
|
4921 |
+
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
|
4922 |
+
dependencies:
|
4923 |
+
is-utf8 "^0.2.0"
|
4924 |
+
|
4925 |
+
strip-bom@^3.0.0:
|
4926 |
+
version "3.0.0"
|
4927 |
+
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
4928 |
+
|
4929 |
+
strip-eof@^1.0.0:
|
4930 |
+
version "1.0.0"
|
4931 |
+
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
4932 |
+
|
4933 |
+
strip-json-comments@~2.0.1:
|
4934 |
+
version "2.0.1"
|
4935 |
+
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
4936 |
+
|
4937 |
+
style-loader@^0.20.3:
|
4938 |
+
version "0.20.3"
|
4939 |
+
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4"
|
4940 |
+
dependencies:
|
4941 |
+
loader-utils "^1.1.0"
|
4942 |
+
schema-utils "^0.4.5"
|
4943 |
+
|
4944 |
+
supports-color@^2.0.0:
|
4945 |
+
version "2.0.0"
|
4946 |
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
4947 |
+
|
4948 |
+
supports-color@^3.2.3:
|
4949 |
+
version "3.2.3"
|
4950 |
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
|
4951 |
+
dependencies:
|
4952 |
+
has-flag "^1.0.0"
|
4953 |
+
|
4954 |
+
supports-color@^5.3.0:
|
4955 |
+
version "5.3.0"
|
4956 |
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
|
4957 |
+
dependencies:
|
4958 |
+
has-flag "^3.0.0"
|
4959 |
+
|
4960 |
+
svgo@^0.7.0:
|
4961 |
+
version "0.7.2"
|
4962 |
+
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
|
4963 |
+
dependencies:
|
4964 |
+
coa "~1.0.1"
|
4965 |
+
colors "~1.1.2"
|
4966 |
+
csso "~2.3.1"
|
4967 |
+
js-yaml "~3.7.0"
|
4968 |
+
mkdirp "~0.5.1"
|
4969 |
+
sax "~1.2.1"
|
4970 |
+
whet.extend "~0.9.9"
|
4971 |
+
|
4972 |
+
symbol-observable@1.0.1:
|
4973 |
+
version "1.0.1"
|
4974 |
+
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
|
4975 |
+
|
4976 |
+
symbol-observable@^0.2.2:
|
4977 |
+
version "0.2.4"
|
4978 |
+
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
|
4979 |
+
|
4980 |
+
tailwindcss@^0.5.2:
|
4981 |
+
version "0.5.2"
|
4982 |
+
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-0.5.2.tgz#eded994f26ee9715e2bb13ba82ed087637994e15"
|
4983 |
+
dependencies:
|
4984 |
+
commander "^2.11.0"
|
4985 |
+
fs-extra "^4.0.2"
|
4986 |
+
lodash "^4.17.4"
|
4987 |
+
perfectionist "^2.4.0"
|
4988 |
+
postcss "^6.0.9"
|
4989 |
+
postcss-functions "^3.0.0"
|
4990 |
+
postcss-js "^1.0.1"
|
4991 |
+
postcss-nested "^3.0.0"
|
4992 |
+
postcss-selector-parser "^3.1.1"
|
4993 |
+
|
4994 |
+
tapable@^1.0.0:
|
4995 |
+
version "1.0.0"
|
4996 |
+
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2"
|
4997 |
+
|
4998 |
+
tar-pack@^3.4.0:
|
4999 |
+
version "3.4.1"
|
5000 |
+
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
|
5001 |
+
dependencies:
|
5002 |
+
debug "^2.2.0"
|
5003 |
+
fstream "^1.0.10"
|
5004 |
+
fstream-ignore "^1.0.5"
|
5005 |
+
once "^1.3.3"
|
5006 |
+
readable-stream "^2.1.4"
|
5007 |
+
rimraf "^2.5.1"
|
5008 |
+
tar "^2.2.1"
|
5009 |
+
uid-number "^0.0.6"
|
5010 |
+
|
5011 |
+
tar@^2.2.1:
|
5012 |
+
version "2.2.1"
|
5013 |
+
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
|
5014 |
+
dependencies:
|
5015 |
+
block-stream "*"
|
5016 |
+
fstream "^1.0.2"
|
5017 |
+
inherits "2"
|
5018 |
+
|
5019 |
+
temp@^0.8.1:
|
5020 |
+
version "0.8.3"
|
5021 |
+
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
|
5022 |
+
dependencies:
|
5023 |
+
os-tmpdir "^1.0.0"
|
5024 |
+
rimraf "~2.2.6"
|
5025 |
+
|
5026 |
+
text-table@^0.2.0:
|
5027 |
+
version "0.2.0"
|
5028 |
+
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
5029 |
+
|
5030 |
+
textextensions@2:
|
5031 |
+
version "2.2.0"
|
5032 |
+
resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286"
|
5033 |
+
|
5034 |
+
through2@^2.0.0:
|
5035 |
+
version "2.0.3"
|
5036 |
+
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
|
5037 |
+
dependencies:
|
5038 |
+
readable-stream "^2.1.5"
|
5039 |
+
xtend "~4.0.1"
|
5040 |
+
|
5041 |
+
through@^2.3.6:
|
5042 |
+
version "2.3.8"
|
5043 |
+
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
5044 |
+
|
5045 |
+
timed-out@^4.0.0, timed-out@^4.0.1:
|
5046 |
+
version "4.0.1"
|
5047 |
+
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
|
5048 |
+
|
5049 |
+
timers-browserify@^2.0.4:
|
5050 |
+
version "2.0.6"
|
5051 |
+
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
|
5052 |
+
dependencies:
|
5053 |
+
setimmediate "^1.0.4"
|
5054 |
+
|
5055 |
+
tmp@^0.0.33:
|
5056 |
+
version "0.0.33"
|
5057 |
+
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
5058 |
+
dependencies:
|
5059 |
+
os-tmpdir "~1.0.2"
|
5060 |
+
|
5061 |
+
to-arraybuffer@^1.0.0:
|
5062 |
+
version "1.0.1"
|
5063 |
+
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
|
5064 |
+
|
5065 |
+
to-fast-properties@^1.0.3:
|
5066 |
+
version "1.0.3"
|
5067 |
+
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
5068 |
+
|
5069 |
+
to-object-path@^0.3.0:
|
5070 |
+
version "0.3.0"
|
5071 |
+
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
|
5072 |
+
dependencies:
|
5073 |
+
kind-of "^3.0.2"
|
5074 |
+
|
5075 |
+
to-regex-range@^2.1.0:
|
5076 |
+
version "2.1.1"
|
5077 |
+
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
|
5078 |
+
dependencies:
|
5079 |
+
is-number "^3.0.0"
|
5080 |
+
repeat-string "^1.6.1"
|
5081 |
+
|
5082 |
+
to-regex@^3.0.1, to-regex@^3.0.2:
|
5083 |
+
version "3.0.2"
|
5084 |
+
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
|
5085 |
+
dependencies:
|
5086 |
+
define-property "^2.0.2"
|
5087 |
+
extend-shallow "^3.0.2"
|
5088 |
+
regex-not "^1.0.2"
|
5089 |
+
safe-regex "^1.1.0"
|
5090 |
+
|
5091 |
+
tough-cookie@~2.3.0:
|
5092 |
+
version "2.3.4"
|
5093 |
+
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
|
5094 |
+
dependencies:
|
5095 |
+
punycode "^1.4.1"
|
5096 |
+
|
5097 |
+
trim-right@^1.0.1:
|
5098 |
+
version "1.0.1"
|
5099 |
+
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
5100 |
+
|
5101 |
+
tty-browserify@0.0.0:
|
5102 |
+
version "0.0.0"
|
5103 |
+
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
5104 |
+
|
5105 |
+
tunnel-agent@^0.6.0:
|
5106 |
+
version "0.6.0"
|
5107 |
+
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
5108 |
+
dependencies:
|
5109 |
+
safe-buffer "^5.0.1"
|
5110 |
+
|
5111 |
+
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
5112 |
+
version "0.14.5"
|
5113 |
+
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
5114 |
+
|
5115 |
+
typedarray@^0.0.6:
|
5116 |
+
version "0.0.6"
|
5117 |
+
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
5118 |
+
|
5119 |
+
uglify-es@^3.3.4:
|
5120 |
+
version "3.3.9"
|
5121 |
+
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
|
5122 |
+
dependencies:
|
5123 |
+
commander "~2.13.0"
|
5124 |
+
source-map "~0.6.1"
|
5125 |
+
|
5126 |
+
uglifyjs-webpack-plugin@^1.2.4:
|
5127 |
+
version "1.2.4"
|
5128 |
+
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043"
|
5129 |
+
dependencies:
|
5130 |
+
cacache "^10.0.4"
|
5131 |
+
find-cache-dir "^1.0.0"
|
5132 |
+
schema-utils "^0.4.5"
|
5133 |
+
serialize-javascript "^1.4.0"
|
5134 |
+
source-map "^0.6.1"
|
5135 |
+
uglify-es "^3.3.4"
|
5136 |
+
webpack-sources "^1.1.0"
|
5137 |
+
worker-farm "^1.5.2"
|
5138 |
+
|
5139 |
+
uid-number@^0.0.6:
|
5140 |
+
version "0.0.6"
|
5141 |
+
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
|
5142 |
+
|
5143 |
+
underscore@~1.6.0:
|
5144 |
+
version "1.6.0"
|
5145 |
+
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
|
5146 |
+
|
5147 |
+
union-value@^1.0.0:
|
5148 |
+
version "1.0.0"
|
5149 |
+
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
|
5150 |
+
dependencies:
|
5151 |
+
arr-union "^3.1.0"
|
5152 |
+
get-value "^2.0.6"
|
5153 |
+
is-extendable "^0.1.1"
|
5154 |
+
set-value "^0.4.3"
|
5155 |
+
|
5156 |
+
uniq@^1.0.1:
|
5157 |
+
version "1.0.1"
|
5158 |
+
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
|
5159 |
+
|
5160 |
+
uniqid@^4.0.0:
|
5161 |
+
version "4.1.1"
|
5162 |
+
resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
|
5163 |
+
dependencies:
|
5164 |
+
macaddress "^0.2.8"
|
5165 |
+
|
5166 |
+
uniqs@^2.0.0:
|
5167 |
+
version "2.0.0"
|
5168 |
+
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
|
5169 |
+
|
5170 |
+
unique-filename@^1.1.0:
|
5171 |
+
version "1.1.0"
|
5172 |
+
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
|
5173 |
+
dependencies:
|
5174 |
+
unique-slug "^2.0.0"
|
5175 |
+
|
5176 |
+
unique-slug@^2.0.0:
|
5177 |
+
version "2.0.0"
|
5178 |
+
resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab"
|
5179 |
+
dependencies:
|
5180 |
+
imurmurhash "^0.1.4"
|
5181 |
+
|
5182 |
+
universalify@^0.1.0:
|
5183 |
+
version "0.1.1"
|
5184 |
+
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
|
5185 |
+
|
5186 |
+
unset-value@^1.0.0:
|
5187 |
+
version "1.0.0"
|
5188 |
+
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
|
5189 |
+
dependencies:
|
5190 |
+
has-value "^0.3.1"
|
5191 |
+
isobject "^3.0.0"
|
5192 |
+
|
5193 |
+
untildify@^3.0.2:
|
5194 |
+
version "3.0.2"
|
5195 |
+
resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.2.tgz#7f1f302055b3fea0f3e81dc78eb36766cb65e3f1"
|
5196 |
+
|
5197 |
+
upath@^1.0.0:
|
5198 |
+
version "1.0.4"
|
5199 |
+
resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d"
|
5200 |
+
|
5201 |
+
uri-js@^3.0.2:
|
5202 |
+
version "3.0.2"
|
5203 |
+
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa"
|
5204 |
+
dependencies:
|
5205 |
+
punycode "^2.1.0"
|
5206 |
+
|
5207 |
+
urix@^0.1.0:
|
5208 |
+
version "0.1.0"
|
5209 |
+
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
|
5210 |
+
|
5211 |
+
url-parse-lax@^1.0.0:
|
5212 |
+
version "1.0.0"
|
5213 |
+
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
|
5214 |
+
dependencies:
|
5215 |
+
prepend-http "^1.0.1"
|
5216 |
+
|
5217 |
+
url-parse-lax@^3.0.0:
|
5218 |
+
version "3.0.0"
|
5219 |
+
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
|
5220 |
+
dependencies:
|
5221 |
+
prepend-http "^2.0.0"
|
5222 |
+
|
5223 |
+
url-to-options@^1.0.1:
|
5224 |
+
version "1.0.1"
|
5225 |
+
resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
|
5226 |
+
|
5227 |
+
url@^0.11.0:
|
5228 |
+
version "0.11.0"
|
5229 |
+
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
5230 |
+
dependencies:
|
5231 |
+
punycode "1.3.2"
|
5232 |
+
querystring "0.2.0"
|
5233 |
+
|
5234 |
+
use@^3.1.0:
|
5235 |
+
version "3.1.0"
|
5236 |
+
resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544"
|
5237 |
+
dependencies:
|
5238 |
+
kind-of "^6.0.2"
|
5239 |
+
|
5240 |
+
util-deprecate@~1.0.1:
|
5241 |
+
version "1.0.2"
|
5242 |
+
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
5243 |
+
|
5244 |
+
util@0.10.3, util@^0.10.3:
|
5245 |
+
version "0.10.3"
|
5246 |
+
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
|
5247 |
+
dependencies:
|
5248 |
+
inherits "2.0.1"
|
5249 |
+
|
5250 |
+
uuid@^3.0.0:
|
5251 |
+
version "3.2.1"
|
5252 |
+
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
5253 |
+
|
5254 |
+
v8-compile-cache@^1.1.2:
|
5255 |
+
version "1.1.2"
|
5256 |
+
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4"
|
5257 |
+
|
5258 |
+
validate-npm-package-license@^3.0.1:
|
5259 |
+
version "3.0.3"
|
5260 |
+
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
|
5261 |
+
dependencies:
|
5262 |
+
spdx-correct "^3.0.0"
|
5263 |
+
spdx-expression-parse "^3.0.0"
|
5264 |
+
|
5265 |
+
vendors@^1.0.0:
|
5266 |
+
version "1.0.1"
|
5267 |
+
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
|
5268 |
+
|
5269 |
+
verror@1.10.0:
|
5270 |
+
version "1.10.0"
|
5271 |
+
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
5272 |
+
dependencies:
|
5273 |
+
assert-plus "^1.0.0"
|
5274 |
+
core-util-is "1.0.2"
|
5275 |
+
extsprintf "^1.2.0"
|
5276 |
+
|
5277 |
+
vinyl-file@^2.0.0:
|
5278 |
+
version "2.0.0"
|
5279 |
+
resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a"
|
5280 |
+
dependencies:
|
5281 |
+
graceful-fs "^4.1.2"
|
5282 |
+
pify "^2.3.0"
|
5283 |
+
pinkie-promise "^2.0.0"
|
5284 |
+
strip-bom "^2.0.0"
|
5285 |
+
strip-bom-stream "^2.0.0"
|
5286 |
+
vinyl "^1.1.0"
|
5287 |
+
|
5288 |
+
vinyl@^1.1.0:
|
5289 |
+
version "1.2.0"
|
5290 |
+
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
|
5291 |
+
dependencies:
|
5292 |
+
clone "^1.0.0"
|
5293 |
+
clone-stats "^0.0.1"
|
5294 |
+
replace-ext "0.0.1"
|
5295 |
+
|
5296 |
+
vinyl@^2.0.1:
|
5297 |
+
version "2.1.0"
|
5298 |
+
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
|
5299 |
+
dependencies:
|
5300 |
+
clone "^2.1.1"
|
5301 |
+
clone-buffer "^1.0.0"
|
5302 |
+
clone-stats "^1.0.0"
|
5303 |
+
cloneable-readable "^1.0.0"
|
5304 |
+
remove-trailing-separator "^1.0.1"
|
5305 |
+
replace-ext "^1.0.0"
|
5306 |
+
|
5307 |
+
vm-browserify@0.0.4:
|
5308 |
+
version "0.0.4"
|
5309 |
+
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
|
5310 |
+
dependencies:
|
5311 |
+
indexof "0.0.1"
|
5312 |
+
|
5313 |
+
watchpack@^1.5.0:
|
5314 |
+
version "1.5.0"
|
5315 |
+
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed"
|
5316 |
+
dependencies:
|
5317 |
+
chokidar "^2.0.2"
|
5318 |
+
graceful-fs "^4.1.2"
|
5319 |
+
neo-async "^2.5.0"
|
5320 |
+
|
5321 |
+
webpack-addons@^1.1.5:
|
5322 |
+
version "1.1.5"
|
5323 |
+
resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a"
|
5324 |
+
dependencies:
|
5325 |
+
jscodeshift "^0.4.0"
|
5326 |
+
|
5327 |
+
webpack-cli@^2.0.14:
|
5328 |
+
version "2.0.14"
|
5329 |
+
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.0.14.tgz#71d03d8c10547c1dfd674f71ff3b0457c33a74cd"
|
5330 |
+
dependencies:
|
5331 |
+
chalk "^2.3.2"
|
5332 |
+
cross-spawn "^6.0.5"
|
5333 |
+
diff "^3.5.0"
|
5334 |
+
enhanced-resolve "^4.0.0"
|
5335 |
+
envinfo "^4.4.2"
|
5336 |
+
glob-all "^3.1.0"
|
5337 |
+
global-modules "^1.0.0"
|
5338 |
+
got "^8.2.0"
|
5339 |
+
import-local "^1.0.0"
|
5340 |
+
inquirer "^5.1.0"
|
5341 |
+
interpret "^1.0.4"
|
5342 |
+
jscodeshift "^0.5.0"
|
5343 |
+
listr "^0.13.0"
|
5344 |
+
loader-utils "^1.1.0"
|
5345 |
+
lodash "^4.17.5"
|
5346 |
+
log-symbols "^2.2.0"
|
5347 |
+
mkdirp "^0.5.1"
|
5348 |
+
p-each-series "^1.0.0"
|
5349 |
+
p-lazy "^1.0.0"
|
5350 |
+
prettier "^1.5.3"
|
5351 |
+
supports-color "^5.3.0"
|
5352 |
+
v8-compile-cache "^1.1.2"
|
5353 |
+
webpack-addons "^1.1.5"
|
5354 |
+
yargs "^11.1.0"
|
5355 |
+
yeoman-environment "^2.0.0"
|
5356 |
+
yeoman-generator "^2.0.3"
|
5357 |
+
|
5358 |
+
webpack-sources@^1.0.1, webpack-sources@^1.1.0:
|
5359 |
+
version "1.1.0"
|
5360 |
+
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
5361 |
+
dependencies:
|
5362 |
+
source-list-map "^2.0.0"
|
5363 |
+
source-map "~0.6.1"
|
5364 |
+
|
5365 |
+
webpack@^4.5.0:
|
5366 |
+
version "4.5.0"
|
5367 |
+
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.5.0.tgz#1e6f71e148ead02be265ff2879c9cd6bb30b8848"
|
5368 |
+
dependencies:
|
5369 |
+
acorn "^5.0.0"
|
5370 |
+
acorn-dynamic-import "^3.0.0"
|
5371 |
+
ajv "^6.1.0"
|
5372 |
+
ajv-keywords "^3.1.0"
|
5373 |
+
chrome-trace-event "^0.1.1"
|
5374 |
+
enhanced-resolve "^4.0.0"
|
5375 |
+
eslint-scope "^3.7.1"
|
5376 |
+
loader-runner "^2.3.0"
|
5377 |
+
loader-utils "^1.1.0"
|
5378 |
+
memory-fs "~0.4.1"
|
5379 |
+
micromatch "^3.1.8"
|
5380 |
+
mkdirp "~0.5.0"
|
5381 |
+
neo-async "^2.5.0"
|
5382 |
+
node-libs-browser "^2.0.0"
|
5383 |
+
schema-utils "^0.4.2"
|
5384 |
+
tapable "^1.0.0"
|
5385 |
+
uglifyjs-webpack-plugin "^1.2.4"
|
5386 |
+
watchpack "^1.5.0"
|
5387 |
+
webpack-sources "^1.0.1"
|
5388 |
+
|
5389 |
+
whet.extend@~0.9.9:
|
5390 |
+
version "0.9.9"
|
5391 |
+
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
|
5392 |
+
|
5393 |
+
which-module@^2.0.0:
|
5394 |
+
version "2.0.0"
|
5395 |
+
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
5396 |
+
|
5397 |
+
which@^1.2.14, which@^1.2.9:
|
5398 |
+
version "1.3.0"
|
5399 |
+
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
|
5400 |
+
dependencies:
|
5401 |
+
isexe "^2.0.0"
|
5402 |
+
|
5403 |
+
wide-align@^1.1.0:
|
5404 |
+
version "1.1.2"
|
5405 |
+
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
|
5406 |
+
dependencies:
|
5407 |
+
string-width "^1.0.2"
|
5408 |
+
|
5409 |
+
worker-farm@^1.5.2:
|
5410 |
+
version "1.6.0"
|
5411 |
+
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
|
5412 |
+
dependencies:
|
5413 |
+
errno "~0.1.7"
|
5414 |
+
|
5415 |
+
wrap-ansi@^2.0.0:
|
5416 |
+
version "2.1.0"
|
5417 |
+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
5418 |
+
dependencies:
|
5419 |
+
string-width "^1.0.1"
|
5420 |
+
strip-ansi "^3.0.1"
|
5421 |
+
|
5422 |
+
wrappy@1:
|
5423 |
+
version "1.0.2"
|
5424 |
+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
5425 |
+
|
5426 |
+
write-file-atomic@^1.2.0:
|
5427 |
+
version "1.3.4"
|
5428 |
+
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
|
5429 |
+
dependencies:
|
5430 |
+
graceful-fs "^4.1.11"
|
5431 |
+
imurmurhash "^0.1.4"
|
5432 |
+
slide "^1.1.5"
|
5433 |
+
|
5434 |
+
write-file-stdout@0.0.2:
|
5435 |
+
version "0.0.2"
|
5436 |
+
resolved "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1"
|
5437 |
+
|
5438 |
+
xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
|
5439 |
+
version "4.0.1"
|
5440 |
+
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
5441 |
+
|
5442 |
+
y18n@^3.2.1:
|
5443 |
+
version "3.2.1"
|
5444 |
+
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
5445 |
+
|
5446 |
+
y18n@^4.0.0:
|
5447 |
+
version "4.0.0"
|
5448 |
+
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
5449 |
+
|
5450 |
+
yallist@^2.1.2:
|
5451 |
+
version "2.1.2"
|
5452 |
+
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
5453 |
+
|
5454 |
+
yargs-parser@^9.0.2:
|
5455 |
+
version "9.0.2"
|
5456 |
+
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
|
5457 |
+
dependencies:
|
5458 |
+
camelcase "^4.1.0"
|
5459 |
+
|
5460 |
+
yargs@^11.1.0:
|
5461 |
+
version "11.1.0"
|
5462 |
+
resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
|
5463 |
+
dependencies:
|
5464 |
+
cliui "^4.0.0"
|
5465 |
+
decamelize "^1.1.1"
|
5466 |
+
find-up "^2.1.0"
|
5467 |
+
get-caller-file "^1.0.1"
|
5468 |
+
os-locale "^2.0.0"
|
5469 |
+
require-directory "^2.1.1"
|
5470 |
+
require-main-filename "^1.0.1"
|
5471 |
+
set-blocking "^2.0.0"
|
5472 |
+
string-width "^2.0.0"
|
5473 |
+
which-module "^2.0.0"
|
5474 |
+
y18n "^3.2.1"
|
5475 |
+
yargs-parser "^9.0.2"
|
5476 |
+
|
5477 |
+
yargs@~1.2.6:
|
5478 |
+
version "1.2.6"
|
5479 |
+
resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b"
|
5480 |
+
dependencies:
|
5481 |
+
minimist "^0.1.0"
|
5482 |
+
|
5483 |
+
yeoman-environment@^2.0.0, yeoman-environment@^2.0.5:
|
5484 |
+
version "2.0.6"
|
5485 |
+
resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.0.6.tgz#ae1b21d826b363f3d637f88a7fc9ea7414cb5377"
|
5486 |
+
dependencies:
|
5487 |
+
chalk "^2.1.0"
|
5488 |
+
debug "^3.1.0"
|
5489 |
+
diff "^3.3.1"
|
5490 |
+
escape-string-regexp "^1.0.2"
|
5491 |
+
globby "^6.1.0"
|
5492 |
+
grouped-queue "^0.3.3"
|
5493 |
+
inquirer "^3.3.0"
|
5494 |
+
is-scoped "^1.0.0"
|
5495 |
+
lodash "^4.17.4"
|
5496 |
+
log-symbols "^2.1.0"
|
5497 |
+
mem-fs "^1.1.0"
|
5498 |
+
text-table "^0.2.0"
|
5499 |
+
untildify "^3.0.2"
|
5500 |
+
|
5501 |
+
yeoman-generator@^2.0.3:
|
5502 |
+
version "2.0.4"
|
5503 |
+
resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.4.tgz#c1c51580ab88506233dd6e837a4bbf8a8e34c9a6"
|
5504 |
+
dependencies:
|
5505 |
+
async "^2.6.0"
|
5506 |
+
chalk "^2.3.0"
|
5507 |
+
cli-table "^0.3.1"
|
5508 |
+
cross-spawn "^5.1.0"
|
5509 |
+
dargs "^5.1.0"
|
5510 |
+
dateformat "^3.0.2"
|
5511 |
+
debug "^3.1.0"
|
5512 |
+
detect-conflict "^1.0.0"
|
5513 |
+
error "^7.0.2"
|
5514 |
+
find-up "^2.1.0"
|
5515 |
+
github-username "^4.0.0"
|
5516 |
+
istextorbinary "^2.1.0"
|
5517 |
+
lodash "^4.17.4"
|
5518 |
+
make-dir "^1.1.0"
|
5519 |
+
mem-fs-editor "^3.0.2"
|
5520 |
+
minimist "^1.2.0"
|
5521 |
+
pretty-bytes "^4.0.2"
|
5522 |
+
read-chunk "^2.1.0"
|
5523 |
+
read-pkg-up "^3.0.0"
|
5524 |
+
rimraf "^2.6.2"
|
5525 |
+
run-async "^2.0.0"
|
5526 |
+
shelljs "^0.8.0"
|
5527 |
+
text-table "^0.2.0"
|
5528 |
+
through2 "^2.0.0"
|
5529 |
+
yeoman-environment "^2.0.5"
|
vendor/league/flysystem/phpspec.yml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
suites:
|
3 |
+
event_suite:
|
4 |
+
namespace: League\Flysystem
|
5 |
+
psr4_prefix: League\Flysystem
|
6 |
+
formatter.name: pretty
|
vendor/league/flysystem/phpunit.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include __DIR__.'/vendor/autoload.php';
|
4 |
+
date_default_timezone_set('UTC');
|
5 |
+
|
6 |
+
if (! is_dir(__DIR__.'/tests/files')) {
|
7 |
+
mkdir(__DIR__.'/tests/files', 0777, true);
|
8 |
+
}
|
9 |
+
|
10 |
+
$fs = new League\Flysystem\Adapter\Local(__DIR__.'/tests/files');
|
11 |
+
foreach (array_reverse($fs->listContents()) as $info) {
|
12 |
+
if (is_file(__DIR__.'/tests/files/'.$info['path'])) {
|
13 |
+
unlink(__DIR__.'/tests/files/'.$info['path']);
|
14 |
+
} else {
|
15 |
+
rmdir(__DIR__.'/tests/files/'.$info['path']);
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
// Constant which show when tests are run on windows
|
20 |
+
define("IS_WINDOWS", strtolower(substr(PHP_OS, 0, 3)) === 'win');
|
vendor/league/flysystem/phpunit.xml
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit backupGlobals="false"
|
3 |
+
backupStaticAttributes="false"
|
4 |
+
bootstrap="./phpunit.php"
|
5 |
+
colors="true"
|
6 |
+
convertErrorsToExceptions="true"
|
7 |
+
convertNoticesToExceptions="true"
|
8 |
+
convertWarningsToExceptions="true"
|
9 |
+
processIsolation="false"
|
10 |
+
stopOnFailure="false"
|
11 |
+
syntaxCheck="true"
|
12 |
+
verbose="true"
|
13 |
+
>
|
14 |
+
<testsuites>
|
15 |
+
<testsuite name="flysystem/tests">
|
16 |
+
<directory suffix="Test.php">./tests/</directory>
|
17 |
+
<directory suffix="Tests.php">./tests/</directory>
|
18 |
+
</testsuite>
|
19 |
+
</testsuites>
|
20 |
+
<filter>
|
21 |
+
<whitelist>
|
22 |
+
<directory suffix=".php">./src/</directory>
|
23 |
+
</whitelist>
|
24 |
+
</filter>
|
25 |
+
<logging>
|
26 |
+
<log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/>
|
27 |
+
<log type="coverage-clover" target="coverage.xml" showUncoveredFiles="true"/>
|
28 |
+
</logging>
|
29 |
+
</phpunit>
|
vendor/league/flysystem/spec/FilesystemSpec.php
ADDED
@@ -0,0 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace spec\League\Flysystem;
|
4 |
+
|
5 |
+
use PhpSpec\ObjectBehavior;
|
6 |
+
use Prophecy\Argument;
|
7 |
+
|
8 |
+
class FilesystemSpec extends ObjectBehavior
|
9 |
+
{
|
10 |
+
protected $adapter;
|
11 |
+
protected $cache;
|
12 |
+
|
13 |
+
public function let($adapter)
|
14 |
+
{
|
15 |
+
$adapter->beADoubleOf('League\Flysystem\AdapterInterface');
|
16 |
+
$this->adapter = $adapter;
|
17 |
+
$this->beConstructedWith($adapter);
|
18 |
+
}
|
19 |
+
|
20 |
+
public function it_is_initializable()
|
21 |
+
{
|
22 |
+
$this->shouldHaveType('League\Flysystem\Filesystem');
|
23 |
+
$this->shouldHaveType('League\Flysystem\FilesystemInterface');
|
24 |
+
}
|
25 |
+
|
26 |
+
public function it_should_expose_an_adapter()
|
27 |
+
{
|
28 |
+
$this->getAdapter()->shouldHaveType('League\Flysystem\AdapterInterface');
|
29 |
+
}
|
30 |
+
|
31 |
+
public function it_should_delegate_plugin_calls($plugin)
|
32 |
+
{
|
33 |
+
$plugin->beADoubleOf('League\Flysystem\Stub\PluginStub');
|
34 |
+
$plugin->setFilesystem($this)->shouldBeCalled();
|
35 |
+
$plugin->getMethod()->willReturn('pluginMethod');
|
36 |
+
$plugin->handle()->shouldBeCalled();
|
37 |
+
$this->addPlugin($plugin);
|
38 |
+
$this->pluginMethod();
|
39 |
+
}
|
40 |
+
|
41 |
+
public function it_should_allow_writes()
|
42 |
+
{
|
43 |
+
$this->adapter->has('file')->willReturn(false);
|
44 |
+
$this->adapter->write('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
45 |
+
'path' => 'file',
|
46 |
+
'contents' => 'contents',
|
47 |
+
]);
|
48 |
+
$this->write('file', 'contents')->shouldReturn(true);
|
49 |
+
}
|
50 |
+
|
51 |
+
public function it_should_allow_stream_writes()
|
52 |
+
{
|
53 |
+
$stream = tmpfile();
|
54 |
+
$this->adapter->has('file')->willReturn(false);
|
55 |
+
$this->adapter->writeStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
56 |
+
'path' => 'file',
|
57 |
+
]);
|
58 |
+
|
59 |
+
$this->writeStream('file', $stream)->shouldReturn(true);
|
60 |
+
fclose($stream);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function it_should_throw_an_exception_when_the_input_is_not_a_resource_during_writeStream()
|
64 |
+
{
|
65 |
+
$this->adapter->has('file')->willReturn(false);
|
66 |
+
$this->shouldThrow('InvalidArgumentException')->duringWriteStream('file', 'string');
|
67 |
+
}
|
68 |
+
|
69 |
+
public function it_should_throw_an_exception_when_the_input_is_not_a_resource_during_updateStream()
|
70 |
+
{
|
71 |
+
$this->adapter->has('file')->willReturn(true);
|
72 |
+
$this->shouldThrow('InvalidArgumentException')->duringUpdateStream('file', 'string');
|
73 |
+
}
|
74 |
+
|
75 |
+
public function it_should_return_false_when_writing_to_a_existing_file()
|
76 |
+
{
|
77 |
+
$this->adapter->has('file')->willReturn(false);
|
78 |
+
$this->adapter->write('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn(false);
|
79 |
+
$this->write('file', 'contents')->shouldEqual(false);
|
80 |
+
}
|
81 |
+
|
82 |
+
public function it_should_return_false_when_writing_a_stream_to_a_existing_file()
|
83 |
+
{
|
84 |
+
$stream = tmpfile();
|
85 |
+
$this->adapter->has('file')->willReturn(false);
|
86 |
+
$this->adapter->writeStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn(false);
|
87 |
+
$this->writeStream('file', $stream)->shouldEqual(false);
|
88 |
+
fclose($stream);
|
89 |
+
}
|
90 |
+
|
91 |
+
public function it_should_forward_updates()
|
92 |
+
{
|
93 |
+
$this->adapter->has('file')->willReturn(true);
|
94 |
+
$this->adapter->update('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
95 |
+
'path' => 'file',
|
96 |
+
'contents' => 'contents',
|
97 |
+
]);
|
98 |
+
$this->update('file', 'contents');
|
99 |
+
}
|
100 |
+
|
101 |
+
public function it_should_forward_stream_updates()
|
102 |
+
{
|
103 |
+
$stream = tmpfile();
|
104 |
+
$this->adapter->has('file')->willReturn(true);
|
105 |
+
$this->adapter->updateStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
106 |
+
'path' => 'file',
|
107 |
+
]);
|
108 |
+
$this->updateStream('file', $stream);
|
109 |
+
fclose($stream);
|
110 |
+
}
|
111 |
+
|
112 |
+
public function it_should_write_when_putting_a_new_file()
|
113 |
+
{
|
114 |
+
$this->adapter->has('file')->willReturn(false);
|
115 |
+
$this->adapter->write('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
116 |
+
'path' => 'file',
|
117 |
+
'contents' => 'contents',
|
118 |
+
]);
|
119 |
+
$this->put('file', 'contents')->shouldReturn(true);
|
120 |
+
}
|
121 |
+
|
122 |
+
public function it_should_write_when_putting_a_new_file_using_stream()
|
123 |
+
{
|
124 |
+
$stream = tmpfile();
|
125 |
+
$this->adapter->has('file')->willReturn(false);
|
126 |
+
$this->adapter->writeStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
127 |
+
'path' => 'file',
|
128 |
+
]);
|
129 |
+
$this->putStream('file', $stream)->shouldReturn(true);
|
130 |
+
fclose($stream);
|
131 |
+
}
|
132 |
+
|
133 |
+
public function it_should_update_when_putting_a_new_file()
|
134 |
+
{
|
135 |
+
$this->adapter->has('file')->willReturn(true);
|
136 |
+
$this->adapter->update('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
137 |
+
'path' => 'file',
|
138 |
+
'contents' => 'contents',
|
139 |
+
]);
|
140 |
+
$this->put('file', 'contents')->shouldReturn(true);
|
141 |
+
}
|
142 |
+
|
143 |
+
public function it_should_update_when_putting_a_new_file_using_stream()
|
144 |
+
{
|
145 |
+
$stream = tmpfile();
|
146 |
+
$this->adapter->has('file')->willReturn(true);
|
147 |
+
$this->adapter->updateStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn($cache = [
|
148 |
+
'path' => 'file',
|
149 |
+
]);
|
150 |
+
$this->putStream('file', $stream)->shouldReturn(true);
|
151 |
+
fclose($stream);
|
152 |
+
}
|
153 |
+
|
154 |
+
public function it_should_return_false_when_write_fails()
|
155 |
+
{
|
156 |
+
$this->adapter->has('file')->willReturn(false);
|
157 |
+
$this->adapter->write('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn(false);
|
158 |
+
$this->write('file', 'contents')->shouldReturn(false);
|
159 |
+
}
|
160 |
+
|
161 |
+
public function it_should_return_false_when_stream_write_fails()
|
162 |
+
{
|
163 |
+
$stream = tmpfile();
|
164 |
+
$this->adapter->has('file')->willReturn(false);
|
165 |
+
$this->adapter->writeStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn(false);
|
166 |
+
$this->writeStream('file', $stream)->shouldReturn(false);
|
167 |
+
fclose($stream);
|
168 |
+
}
|
169 |
+
|
170 |
+
public function it_should_return_false_when_update_fails()
|
171 |
+
{
|
172 |
+
$this->adapter->has('file')->willReturn(true);
|
173 |
+
$this->adapter->update('file', 'contents', Argument::type('League\Flysystem\Config'))->willReturn(false);
|
174 |
+
$this->update('file', 'contents')->shouldReturn(false);
|
175 |
+
}
|
176 |
+
|
177 |
+
public function it_should_return_false_when_stream_update_fails()
|
178 |
+
{
|
179 |
+
$stream = tmpfile();
|
180 |
+
$this->adapter->has('file')->willReturn(true);
|
181 |
+
$this->adapter->updateStream('file', $stream, Argument::type('League\Flysystem\Config'))->willReturn(false);
|
182 |
+
$this->updateStream('file', $stream)->shouldReturn(false);
|
183 |
+
fclose($stream);
|
184 |
+
}
|
185 |
+
|
186 |
+
public function it_should_forward_delete_calls()
|
187 |
+
{
|
188 |
+
$this->adapter->has('file')->willReturn(true);
|
189 |
+
$this->adapter->delete('file')->willReturn(true);
|
190 |
+
$this->delete('file')->shouldReturn(true);
|
191 |
+
}
|
192 |
+
|
193 |
+
public function it_should_return_false_when_failing_to_delete_a_file()
|
194 |
+
{
|
195 |
+
$this->adapter->has('file')->willReturn(true);
|
196 |
+
$this->adapter->delete('file')->willReturn(false);
|
197 |
+
$this->delete('file')->shouldReturn(false);
|
198 |
+
}
|
199 |
+
|
200 |
+
public function it_should_return_true_on_has_when_a_file_exists()
|
201 |
+
{
|
202 |
+
$this->adapter->has('file')->willReturn(true);
|
203 |
+
$this->has('file')->shouldReturn(true);
|
204 |
+
}
|
205 |
+
|
206 |
+
public function it_should_return_false_when_read_fails_during_readAndDelete()
|
207 |
+
{
|
208 |
+
$this->adapter->has('file')->willReturn(true);
|
209 |
+
$this->adapter->read('file')->willReturn(false);
|
210 |
+
$this->readAndDelete('file')->shouldReturn(false);
|
211 |
+
}
|
212 |
+
|
213 |
+
public function it_should_delete_after_reading_during_readAndDelete()
|
214 |
+
{
|
215 |
+
$this->adapter->has('file')->willReturn(true);
|
216 |
+
$this->adapter->read('file')->willReturn(['contents' => 'contents']);
|
217 |
+
$this->adapter->delete('file')->shouldBeCalled();
|
218 |
+
$this->readAndDelete('file')->shouldReturn('contents');
|
219 |
+
}
|
220 |
+
|
221 |
+
public function it_should_return_false_when_checking_if_an_empty_filename_exists()
|
222 |
+
{
|
223 |
+
$this->has('')->shouldReturn(false);
|
224 |
+
}
|
225 |
+
}
|
vendor/league/flysystem/stub/FileOverwritingAdapterStub.php
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\Adapter\CanOverwriteFiles;
|
6 |
+
use League\Flysystem\AdapterInterface;
|
7 |
+
use League\Flysystem\Config;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @codeCoverageIgnore
|
11 |
+
*/
|
12 |
+
class FileOverwritingAdapterStub implements AdapterInterface, CanOverwriteFiles
|
13 |
+
{
|
14 |
+
public $writtenPath = '';
|
15 |
+
public $writtenContents = '';
|
16 |
+
|
17 |
+
public function write($path, $contents, Config $config)
|
18 |
+
{
|
19 |
+
$this->writtenPath = $path;
|
20 |
+
$this->writtenContents = $contents;
|
21 |
+
|
22 |
+
return true;
|
23 |
+
}
|
24 |
+
|
25 |
+
public function writeStream($path, $resource, Config $config)
|
26 |
+
{
|
27 |
+
$this->writtenPath = $path;
|
28 |
+
$this->writtenContents = stream_get_contents($resource);
|
29 |
+
|
30 |
+
return true;
|
31 |
+
}
|
32 |
+
|
33 |
+
public function update($path, $contents, Config $config)
|
34 |
+
{
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
public function updateStream($path, $resource, Config $config)
|
39 |
+
{
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
public function rename($path, $newpath)
|
44 |
+
{
|
45 |
+
|
46 |
+
}
|
47 |
+
|
48 |
+
public function copy($path, $newpath)
|
49 |
+
{
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
public function delete($path)
|
54 |
+
{
|
55 |
+
|
56 |
+
}
|
57 |
+
|
58 |
+
public function deleteDir($dirname)
|
59 |
+
{
|
60 |
+
|
61 |
+
}
|
62 |
+
|
63 |
+
public function createDir($dirname, Config $config)
|
64 |
+
{
|
65 |
+
|
66 |
+
}
|
67 |
+
|
68 |
+
public function setVisibility($path, $visibility)
|
69 |
+
{
|
70 |
+
|
71 |
+
}
|
72 |
+
|
73 |
+
public function has($path)
|
74 |
+
{
|
75 |
+
|
76 |
+
}
|
77 |
+
|
78 |
+
public function read($path)
|
79 |
+
{
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
public function readStream($path)
|
84 |
+
{
|
85 |
+
|
86 |
+
}
|
87 |
+
|
88 |
+
public function listContents($directory = '', $recursive = false)
|
89 |
+
{
|
90 |
+
|
91 |
+
}
|
92 |
+
|
93 |
+
public function getMetadata($path)
|
94 |
+
{
|
95 |
+
|
96 |
+
}
|
97 |
+
|
98 |
+
public function getSize($path)
|
99 |
+
{
|
100 |
+
|
101 |
+
}
|
102 |
+
|
103 |
+
public function getMimetype($path)
|
104 |
+
{
|
105 |
+
|
106 |
+
}
|
107 |
+
|
108 |
+
public function getTimestamp($path)
|
109 |
+
{
|
110 |
+
|
111 |
+
}
|
112 |
+
|
113 |
+
public function getVisibility($path)
|
114 |
+
{
|
115 |
+
|
116 |
+
}
|
117 |
+
}
|
vendor/league/flysystem/stub/FilesystemSpy.php
ADDED
@@ -0,0 +1,354 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use InvalidArgumentException;
|
6 |
+
use League\Flysystem\FileExistsException;
|
7 |
+
use League\Flysystem\FileNotFoundException;
|
8 |
+
use League\Flysystem\FilesystemInterface;
|
9 |
+
use League\Flysystem\Handler;
|
10 |
+
use League\Flysystem\Plugin\PluggableTrait;
|
11 |
+
use League\Flysystem\RootViolationException;
|
12 |
+
|
13 |
+
class FilesystemSpy implements FilesystemInterface
|
14 |
+
{
|
15 |
+
use PluggableTrait;
|
16 |
+
|
17 |
+
public $lastCall = [];
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Check whether a file exists.
|
21 |
+
*
|
22 |
+
* @param string $path
|
23 |
+
*
|
24 |
+
* @return bool
|
25 |
+
*/
|
26 |
+
public function has($path)
|
27 |
+
{
|
28 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Read a file.
|
33 |
+
*
|
34 |
+
* @param string $path The path to the file.
|
35 |
+
*
|
36 |
+
* @throws FileNotFoundException
|
37 |
+
*
|
38 |
+
* @return string|false The file contents or false on failure.
|
39 |
+
*/
|
40 |
+
public function read($path)
|
41 |
+
{
|
42 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Retrieves a read-stream for a path.
|
47 |
+
*
|
48 |
+
* @param string $path The path to the file.
|
49 |
+
*
|
50 |
+
* @throws FileNotFoundException
|
51 |
+
*
|
52 |
+
* @return resource|false The path resource or false on failure.
|
53 |
+
*/
|
54 |
+
public function readStream($path)
|
55 |
+
{
|
56 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* List contents of a directory.
|
61 |
+
*
|
62 |
+
* @param string $directory The directory to list.
|
63 |
+
* @param bool $recursive Whether to list recursively.
|
64 |
+
*
|
65 |
+
* @return array A list of file metadata.
|
66 |
+
*/
|
67 |
+
public function listContents($directory = '', $recursive = false)
|
68 |
+
{
|
69 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Get a file's metadata.
|
74 |
+
*
|
75 |
+
* @param string $path The path to the file.
|
76 |
+
*
|
77 |
+
* @throws FileNotFoundException
|
78 |
+
*
|
79 |
+
* @return array|false The file metadata or false on failure.
|
80 |
+
*/
|
81 |
+
public function getMetadata($path)
|
82 |
+
{
|
83 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Get a file's size.
|
88 |
+
*
|
89 |
+
* @param string $path The path to the file.
|
90 |
+
*
|
91 |
+
* @throws FileNotFoundException
|
92 |
+
*
|
93 |
+
* @return int|false The file size or false on failure.
|
94 |
+
*/
|
95 |
+
public function getSize($path)
|
96 |
+
{
|
97 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get a file's mime-type.
|
102 |
+
*
|
103 |
+
* @param string $path The path to the file.
|
104 |
+
*
|
105 |
+
* @throws FileNotFoundException
|
106 |
+
*
|
107 |
+
* @return string|false The file mime-type or false on failure.
|
108 |
+
*/
|
109 |
+
public function getMimetype($path)
|
110 |
+
{
|
111 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Get a file's timestamp.
|
116 |
+
*
|
117 |
+
* @param string $path The path to the file.
|
118 |
+
*
|
119 |
+
* @throws FileNotFoundException
|
120 |
+
*
|
121 |
+
* @return string|false The timestamp or false on failure.
|
122 |
+
*/
|
123 |
+
public function getTimestamp($path)
|
124 |
+
{
|
125 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Get a file's visibility.
|
130 |
+
*
|
131 |
+
* @param string $path The path to the file.
|
132 |
+
*
|
133 |
+
* @throws FileNotFoundException
|
134 |
+
*
|
135 |
+
* @return string|false The visibility (public|private) or false on failure.
|
136 |
+
*/
|
137 |
+
public function getVisibility($path)
|
138 |
+
{
|
139 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Write a new file.
|
144 |
+
*
|
145 |
+
* @param string $path The path of the new file.
|
146 |
+
* @param string $contents The file contents.
|
147 |
+
* @param array $config An optional configuration array.
|
148 |
+
*
|
149 |
+
* @throws FileExistsException
|
150 |
+
*
|
151 |
+
* @return bool True on success, false on failure.
|
152 |
+
*/
|
153 |
+
public function write($path, $contents, array $config = [])
|
154 |
+
{
|
155 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Write a new file using a stream.
|
160 |
+
*
|
161 |
+
* @param string $path The path of the new file.
|
162 |
+
* @param resource $resource The file handle.
|
163 |
+
* @param array $config An optional configuration array.
|
164 |
+
*
|
165 |
+
* @throws InvalidArgumentException If $resource is not a file handle.
|
166 |
+
* @throws FileExistsException
|
167 |
+
*
|
168 |
+
* @return bool True on success, false on failure.
|
169 |
+
*/
|
170 |
+
public function writeStream($path, $resource, array $config = [])
|
171 |
+
{
|
172 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Update an existing file.
|
177 |
+
*
|
178 |
+
* @param string $path The path of the existing file.
|
179 |
+
* @param string $contents The file contents.
|
180 |
+
* @param array $config An optional configuration array.
|
181 |
+
*
|
182 |
+
* @throws FileNotFoundException
|
183 |
+
*
|
184 |
+
* @return bool True on success, false on failure.
|
185 |
+
*/
|
186 |
+
public function update($path, $contents, array $config = [])
|
187 |
+
{
|
188 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Update an existing file using a stream.
|
193 |
+
*
|
194 |
+
* @param string $path The path of the existing file.
|
195 |
+
* @param resource $resource The file handle.
|
196 |
+
* @param array $config An optional configuration array.
|
197 |
+
*
|
198 |
+
* @throws InvalidArgumentException If $resource is not a file handle.
|
199 |
+
* @throws FileNotFoundException
|
200 |
+
*
|
201 |
+
* @return bool True on success, false on failure.
|
202 |
+
*/
|
203 |
+
public function updateStream($path, $resource, array $config = [])
|
204 |
+
{
|
205 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Rename a file.
|
210 |
+
*
|
211 |
+
* @param string $path Path to the existing file.
|
212 |
+
* @param string $newpath The new path of the file.
|
213 |
+
*
|
214 |
+
* @throws FileExistsException Thrown if $newpath exists.
|
215 |
+
* @throws FileNotFoundException Thrown if $path does not exist.
|
216 |
+
*
|
217 |
+
* @return bool True on success, false on failure.
|
218 |
+
*/
|
219 |
+
public function rename($path, $newpath)
|
220 |
+
{
|
221 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Copy a file.
|
226 |
+
*
|
227 |
+
* @param string $path Path to the existing file.
|
228 |
+
* @param string $newpath The new path of the file.
|
229 |
+
*
|
230 |
+
* @throws FileExistsException Thrown if $newpath exists.
|
231 |
+
* @throws FileNotFoundException Thrown if $path does not exist.
|
232 |
+
*
|
233 |
+
* @return bool True on success, false on failure.
|
234 |
+
*/
|
235 |
+
public function copy($path, $newpath)
|
236 |
+
{
|
237 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Delete a file.
|
242 |
+
*
|
243 |
+
* @param string $path
|
244 |
+
*
|
245 |
+
* @throws FileNotFoundException
|
246 |
+
*
|
247 |
+
* @return bool True on success, false on failure.
|
248 |
+
*/
|
249 |
+
public function delete($path)
|
250 |
+
{
|
251 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Delete a directory.
|
256 |
+
*
|
257 |
+
* @param string $dirname
|
258 |
+
*
|
259 |
+
* @throws RootViolationException Thrown if $dirname is empty.
|
260 |
+
*
|
261 |
+
* @return bool True on success, false on failure.
|
262 |
+
*/
|
263 |
+
public function deleteDir($dirname)
|
264 |
+
{
|
265 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Create a directory.
|
270 |
+
*
|
271 |
+
* @param string $dirname The name of the new directory.
|
272 |
+
* @param array $config An optional configuration array.
|
273 |
+
*
|
274 |
+
* @return bool True on success, false on failure.
|
275 |
+
*/
|
276 |
+
public function createDir($dirname, array $config = [])
|
277 |
+
{
|
278 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Set the visibility for a file.
|
283 |
+
*
|
284 |
+
* @param string $path The path to the file.
|
285 |
+
* @param string $visibility One of 'public' or 'private'.
|
286 |
+
*
|
287 |
+
* @throws FileNotFoundException
|
288 |
+
*
|
289 |
+
* @return bool True on success, false on failure.
|
290 |
+
*/
|
291 |
+
public function setVisibility($path, $visibility)
|
292 |
+
{
|
293 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
294 |
+
}
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Create a file or update if exists.
|
298 |
+
*
|
299 |
+
* @param string $path The path to the file.
|
300 |
+
* @param string $contents The file contents.
|
301 |
+
* @param array $config An optional configuration array.
|
302 |
+
*
|
303 |
+
* @return bool True on success, false on failure.
|
304 |
+
*/
|
305 |
+
public function put($path, $contents, array $config = [])
|
306 |
+
{
|
307 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Create a file or update if exists.
|
312 |
+
*
|
313 |
+
* @param string $path The path to the file.
|
314 |
+
* @param resource $resource The file handle.
|
315 |
+
* @param array $config An optional configuration array.
|
316 |
+
*
|
317 |
+
* @throws InvalidArgumentException Thrown if $resource is not a resource.
|
318 |
+
*
|
319 |
+
* @return bool True on success, false on failure.
|
320 |
+
*/
|
321 |
+
public function putStream($path, $resource, array $config = [])
|
322 |
+
{
|
323 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
324 |
+
}
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Read and delete a file.
|
328 |
+
*
|
329 |
+
* @param string $path The path to the file.
|
330 |
+
*
|
331 |
+
* @throws FileNotFoundException
|
332 |
+
*
|
333 |
+
* @return string|false The file contents, or false on failure.
|
334 |
+
*/
|
335 |
+
public function readAndDelete($path)
|
336 |
+
{
|
337 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
338 |
+
}
|
339 |
+
|
340 |
+
/**
|
341 |
+
* Get a file/directory handler.
|
342 |
+
*
|
343 |
+
* @deprecated
|
344 |
+
*
|
345 |
+
* @param string $path The path to the file.
|
346 |
+
* @param Handler $handler An optional existing handler to populate.
|
347 |
+
*
|
348 |
+
* @return Handler Either a file or directory handler.
|
349 |
+
*/
|
350 |
+
public function get($path, Handler $handler = null)
|
351 |
+
{
|
352 |
+
$this->lastCall = [__METHOD__, func_get_args()];
|
353 |
+
}
|
354 |
+
}
|
vendor/league/flysystem/stub/NotSupportingVisibilityStub.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\Adapter\Polyfill\NotSupportingVisibilityTrait;
|
6 |
+
|
7 |
+
class NotSupportingVisibilityStub
|
8 |
+
{
|
9 |
+
use NotSupportingVisibilityTrait;
|
10 |
+
}
|
vendor/league/flysystem/stub/PluginStub.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\FilesystemInterface;
|
6 |
+
use League\Flysystem\PluginInterface;
|
7 |
+
|
8 |
+
class PluginStub implements PluginInterface
|
9 |
+
{
|
10 |
+
public function setFilesystem(FilesystemInterface $filesystem)
|
11 |
+
{
|
12 |
+
return $this;
|
13 |
+
}
|
14 |
+
|
15 |
+
public function getMethod()
|
16 |
+
{
|
17 |
+
return 'pluginMethod';
|
18 |
+
}
|
19 |
+
|
20 |
+
public function handle()
|
21 |
+
{
|
22 |
+
return 'handled';
|
23 |
+
}
|
24 |
+
}
|
vendor/league/flysystem/stub/StreamedCopyStub.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\Adapter\Polyfill\StreamedCopyTrait;
|
6 |
+
use League\Flysystem\Config;
|
7 |
+
|
8 |
+
class StreamedCopyStub
|
9 |
+
{
|
10 |
+
use StreamedCopyTrait;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @var resource
|
14 |
+
*/
|
15 |
+
private $readResponse;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var resource|null
|
19 |
+
*/
|
20 |
+
private $writeResponse;
|
21 |
+
|
22 |
+
public function __construct($readResponse, $writeResponse = null)
|
23 |
+
{
|
24 |
+
$this->readResponse = $readResponse;
|
25 |
+
$this->writeResponse = $writeResponse;
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @param string $path
|
30 |
+
* @return resource
|
31 |
+
*/
|
32 |
+
public function readStream($path)
|
33 |
+
{
|
34 |
+
return $this->readResponse;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @param string $path
|
39 |
+
* @param resource $resource
|
40 |
+
* @param Config $config
|
41 |
+
* @return resource
|
42 |
+
*/
|
43 |
+
public function writeStream($path, $resource, Config $config)
|
44 |
+
{
|
45 |
+
return $this->writeResponse;
|
46 |
+
}
|
47 |
+
}
|
vendor/league/flysystem/stub/StreamedReadingStub.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\Adapter\Polyfill\StreamedReadingTrait;
|
6 |
+
|
7 |
+
class StreamedReadingStub
|
8 |
+
{
|
9 |
+
use StreamedReadingTrait;
|
10 |
+
|
11 |
+
public function read($path)
|
12 |
+
{
|
13 |
+
if ($path === 'true.ext') {
|
14 |
+
return ['contents' => $path];
|
15 |
+
}
|
16 |
+
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
}
|
vendor/league/flysystem/stub/StreamedWritingStub.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Stub;
|
4 |
+
|
5 |
+
use League\Flysystem\Adapter\Polyfill\StreamedWritingTrait;
|
6 |
+
use League\Flysystem\Config;
|
7 |
+
|
8 |
+
class StreamedWritingStub
|
9 |
+
{
|
10 |
+
use StreamedWritingTrait;
|
11 |
+
|
12 |
+
public function write($path, $contents, Config $config)
|
13 |
+
{
|
14 |
+
return compact('path', 'contents');
|
15 |
+
}
|
16 |
+
|
17 |
+
public function update($path, $contents, Config $config)
|
18 |
+
{
|
19 |
+
return compact('path', 'contents');
|
20 |
+
}
|
21 |
+
}
|
vendor/league/flysystem/tests/AdaptersThatCanOverwriteFilesTest.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Filesystem;
|
6 |
+
use League\Flysystem\Stub\FileOverwritingAdapterStub;
|
7 |
+
use PHPUnit\Framework\TestCase;
|
8 |
+
|
9 |
+
class AdaptersThatCanOverwriteFilesTest extends TestCase
|
10 |
+
{
|
11 |
+
use \PHPUnitHacks;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @test
|
15 |
+
*/
|
16 |
+
public function overwriting_files_with_put()
|
17 |
+
{
|
18 |
+
$filesystem = new Filesystem($adapter = new FileOverwritingAdapterStub());
|
19 |
+
$filesystem->put('path.txt', 'string contents');
|
20 |
+
|
21 |
+
$this->assertEquals('path.txt', $adapter->writtenPath);
|
22 |
+
$this->assertEquals('string contents', $adapter->writtenContents);
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @test
|
27 |
+
*/
|
28 |
+
public function overwriting_files_with_putStream()
|
29 |
+
{
|
30 |
+
$filesystem = new Filesystem($adapter = new FileOverwritingAdapterStub());
|
31 |
+
$stream = tmpfile();
|
32 |
+
fwrite($stream, 'stream contents');
|
33 |
+
$filesystem->putStream('path.txt',$stream);
|
34 |
+
fclose($stream);
|
35 |
+
|
36 |
+
$this->assertEquals('path.txt', $adapter->writtenPath);
|
37 |
+
$this->assertEquals('stream contents', $adapter->writtenContents);
|
38 |
+
}
|
39 |
+
}
|
vendor/league/flysystem/tests/ConfigTests.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Config;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class ConfigTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
public function testGet()
|
11 |
+
{
|
12 |
+
$config = new Config();
|
13 |
+
$this->assertFalse($config->has('setting'));
|
14 |
+
$this->assertNull($config->get('setting'));
|
15 |
+
$config->set('setting', 'value');
|
16 |
+
$this->assertEquals('value', $config->get('setting'));
|
17 |
+
$fallback = new Config(['fallback_setting' => 'fallback_value']);
|
18 |
+
$config->setFallback($fallback);
|
19 |
+
$this->assertEquals('fallback_value', $config->get('fallback_setting'));
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testFallingBackWhenCallingHas()
|
23 |
+
{
|
24 |
+
$config = new Config();
|
25 |
+
$fallback = new Config(['setting_name' => true]);
|
26 |
+
$config->setFallback($fallback);
|
27 |
+
|
28 |
+
$this->assertTrue($config->has('setting_name'));
|
29 |
+
}
|
30 |
+
}
|
vendor/league/flysystem/tests/EmptyDirPluginTests.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
use League\Flysystem\Plugin\EmptyDir;
|
5 |
+
use PHPUnit\Framework\TestCase;
|
6 |
+
|
7 |
+
class EmptyDirPluginTests extends TestCase
|
8 |
+
{
|
9 |
+
use \PHPUnitHacks;
|
10 |
+
|
11 |
+
public function testPlugin()
|
12 |
+
{
|
13 |
+
$filesystem = $this->prophesize('League\Flysystem\FilesystemInterface');
|
14 |
+
$plugin = new EmptyDir();
|
15 |
+
$this->assertEquals('emptyDir', $plugin->getMethod());
|
16 |
+
$plugin->setFilesystem($filesystem->reveal());
|
17 |
+
$filesystem->listContents('dirname', false)->willReturn([
|
18 |
+
['type' => 'dir', 'path' => 'dirname/dir'],
|
19 |
+
['type' => 'file', 'path' => 'dirname/file.txt'],
|
20 |
+
['type' => 'dir', 'path' => 'dirname/another_dir'],
|
21 |
+
['type' => 'file', 'path' => 'dirname/another_file.txt'],
|
22 |
+
])->shouldBeCalled();
|
23 |
+
|
24 |
+
$filesystem->delete('dirname/file.txt')->shouldBeCalled();
|
25 |
+
$filesystem->delete('dirname/another_file.txt')->shouldBeCalled();
|
26 |
+
$filesystem->deleteDir('dirname/dir')->shouldBeCalled();
|
27 |
+
$filesystem->deleteDir('dirname/another_dir')->shouldBeCalled();
|
28 |
+
|
29 |
+
$plugin->handle('dirname');
|
30 |
+
}
|
31 |
+
}
|
vendor/league/flysystem/tests/FailTests.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter
|
4 |
+
{
|
5 |
+
function file_put_contents($name)
|
6 |
+
{
|
7 |
+
if (strpos($name, 'pleasefail') !== false) {
|
8 |
+
return false;
|
9 |
+
}
|
10 |
+
|
11 |
+
return call_user_func_array('file_put_contents', func_get_args());
|
12 |
+
}
|
13 |
+
|
14 |
+
function file_get_contents($name)
|
15 |
+
{
|
16 |
+
if (strpos($name, 'pleasefail') !== false) {
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
|
20 |
+
return call_user_func_array('file_get_contents', func_get_args());
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
namespace League\Flysystem
|
25 |
+
{
|
26 |
+
use PHPUnit\Framework\TestCase;
|
27 |
+
|
28 |
+
class FailTests extends TestCase
|
29 |
+
{
|
30 |
+
use \PHPUnitHacks;
|
31 |
+
|
32 |
+
public function testFails()
|
33 |
+
{
|
34 |
+
$adapter = new Adapter\Local(__DIR__ . '/files');
|
35 |
+
$this->assertFalse($adapter->write('pleasefail.txt', 'content', new Config()));
|
36 |
+
$this->assertFalse($adapter->update('pleasefail.txt', 'content', new Config()));
|
37 |
+
$this->assertFalse($adapter->read('pleasefail.txt'));
|
38 |
+
$this->assertFalse($adapter->deleteDir('non-existing'));
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
vendor/league/flysystem/tests/FileTests.php
ADDED
@@ -0,0 +1,215 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem;
|
4 |
+
|
5 |
+
use PHPUnit\Framework\TestCase;
|
6 |
+
|
7 |
+
class FileTests extends TestCase
|
8 |
+
{
|
9 |
+
use \PHPUnitHacks;
|
10 |
+
|
11 |
+
/** @var Filesystem */
|
12 |
+
protected $filesystem;
|
13 |
+
|
14 |
+
public function setup()
|
15 |
+
{
|
16 |
+
clearstatcache();
|
17 |
+
$fs = new Adapter\Local(__DIR__ . '/');
|
18 |
+
$fs->deleteDir('files');
|
19 |
+
$fs->createDir('files', new Config());
|
20 |
+
$fs->write('file.txt', 'contents', new Config());
|
21 |
+
$this->filesystem = new Filesystem($fs);
|
22 |
+
}
|
23 |
+
|
24 |
+
public function tearDown()
|
25 |
+
{
|
26 |
+
try {
|
27 |
+
$this->filesystem->delete('file.txt');
|
28 |
+
} catch (FileNotFoundException $e) {
|
29 |
+
}
|
30 |
+
$this->filesystem->deleteDir('files');
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @return File
|
35 |
+
*/
|
36 |
+
protected function getFile()
|
37 |
+
{
|
38 |
+
return $this->filesystem->get('file.txt');
|
39 |
+
}
|
40 |
+
|
41 |
+
public function testExists()
|
42 |
+
{
|
43 |
+
$file = $this->getFile();
|
44 |
+
$this->assertTrue($file->exists());
|
45 |
+
}
|
46 |
+
|
47 |
+
public function testRead()
|
48 |
+
{
|
49 |
+
$file = $this->getFile();
|
50 |
+
$contents = $file->read();
|
51 |
+
$this->assertEquals('contents', $contents);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function testReadSteam()
|
55 |
+
{
|
56 |
+
$file = $this->getFile();
|
57 |
+
$this->assertInternalType('resource', $file->readStream());
|
58 |
+
}
|
59 |
+
|
60 |
+
public function testWrite()
|
61 |
+
{
|
62 |
+
$file = new File();
|
63 |
+
$this->filesystem->get('files/new.txt', $file);
|
64 |
+
$file->write('new contents');
|
65 |
+
$this->assertEquals('new contents', $file->read());
|
66 |
+
}
|
67 |
+
|
68 |
+
public function testWriteStream()
|
69 |
+
{
|
70 |
+
$file = new File();
|
71 |
+
$this->filesystem->get('files/new.txt', $file);
|
72 |
+
$resource = tmpfile();
|
73 |
+
fwrite($resource, 'stream contents');
|
74 |
+
$file->writeStream($resource);
|
75 |
+
$this->assertEquals('stream contents', $file->read());
|
76 |
+
}
|
77 |
+
|
78 |
+
public function testUpdate()
|
79 |
+
{
|
80 |
+
$file = $this->getFile();
|
81 |
+
$file->update('new contents');
|
82 |
+
$this->assertEquals('new contents', $file->read());
|
83 |
+
}
|
84 |
+
|
85 |
+
public function testUpdateStream()
|
86 |
+
{
|
87 |
+
$file = $this->getFile();
|
88 |
+
$resource = tmpfile();
|
89 |
+
fwrite($resource, 'stream contents');
|
90 |
+
$file->updateStream($resource);
|
91 |
+
fclose($resource);
|
92 |
+
$this->assertEquals('stream contents', $file->read());
|
93 |
+
}
|
94 |
+
|
95 |
+
public function testPut()
|
96 |
+
{
|
97 |
+
$file = new File();
|
98 |
+
$this->filesystem->get('files/new.txt', $file);
|
99 |
+
$file->put('new contents');
|
100 |
+
$this->assertEquals('new contents', $file->read());
|
101 |
+
$file->put('updated content');
|
102 |
+
$this->assertEquals('updated content', $file->read());
|
103 |
+
}
|
104 |
+
|
105 |
+
public function testPutStream()
|
106 |
+
{
|
107 |
+
$file = new File();
|
108 |
+
$this->filesystem->get('files/new.txt', $file);
|
109 |
+
|
110 |
+
$resource = tmpfile();
|
111 |
+
fwrite($resource, 'stream contents');
|
112 |
+
$file->putStream($resource);
|
113 |
+
fclose($resource);
|
114 |
+
|
115 |
+
$this->assertEquals('stream contents', $file->read());
|
116 |
+
|
117 |
+
$resource = tmpfile();
|
118 |
+
fwrite($resource, 'updated stream contents');
|
119 |
+
$file->putStream($resource);
|
120 |
+
fclose($resource);
|
121 |
+
|
122 |
+
$this->assertEquals('updated stream contents', $file->read());
|
123 |
+
}
|
124 |
+
|
125 |
+
public function testRename()
|
126 |
+
{
|
127 |
+
$file = $this->getFile();
|
128 |
+
$result = $file->rename('files/renamed.txt');
|
129 |
+
$this->assertTrue($result);
|
130 |
+
$this->assertFalse($this->filesystem->has('file.txt'));
|
131 |
+
$this->assertTrue($this->filesystem->has('files/renamed.txt'));
|
132 |
+
$this->assertEquals('files/renamed.txt', $file->getPath());
|
133 |
+
}
|
134 |
+
|
135 |
+
public function testRenameFails()
|
136 |
+
{
|
137 |
+
$adapter = $this->prophesize('League\Flysystem\AdapterInterface');
|
138 |
+
$adapter->has('file.txt')->willReturn(true)->shouldBeCalled();
|
139 |
+
$adapter->has('files/renamed.txt')->willReturn(false)->shouldBeCalled();
|
140 |
+
$adapter->rename('file.txt', 'files/renamed.txt')->willReturn(false)->shouldBeCalled();
|
141 |
+
|
142 |
+
$filesystem = new Filesystem($adapter->reveal());
|
143 |
+
/** @var File $file */
|
144 |
+
$file = $filesystem->get('file.txt', new File());
|
145 |
+
$result = $file->rename('files/renamed.txt');
|
146 |
+
$this->assertFalse($result);
|
147 |
+
$this->assertEquals('file.txt', $file->getPath());
|
148 |
+
}
|
149 |
+
|
150 |
+
public function testCopy()
|
151 |
+
{
|
152 |
+
$file = $this->getFile();
|
153 |
+
$copied = $file->copy('files/copied.txt');
|
154 |
+
$this->assertTrue($this->filesystem->has('file.txt'));
|
155 |
+
$this->assertTrue($this->filesystem->has('files/copied.txt'));
|
156 |
+
$this->assertEquals('file.txt', $file->getPath());
|
157 |
+
$this->assertEquals('files/copied.txt', $copied->getPath());
|
158 |
+
}
|
159 |
+
|
160 |
+
public function testCopyFails()
|
161 |
+
{
|
162 |
+
$adapter = $this->prophesize('League\Flysystem\AdapterInterface');
|
163 |
+
$adapter->has('file.txt')->willReturn(true)->shouldBeCalled();
|
164 |
+
$adapter->has('files/copied.txt')->willReturn(false)->shouldBeCalled();
|
165 |
+
$adapter->copy('file.txt', 'files/copied.txt')->willReturn(false)->shouldBeCalled();
|
166 |
+
|
167 |
+
$filesystem = new Filesystem($adapter->reveal());
|
168 |
+
/** @var File $file */
|
169 |
+
$file = $filesystem->get('file.txt', new File());
|
170 |
+
$result = $file->copy('files/copied.txt');
|
171 |
+
$this->assertFalse($result);
|
172 |
+
}
|
173 |
+
|
174 |
+
public function testTimestamp()
|
175 |
+
{
|
176 |
+
$file = $this->getFile();
|
177 |
+
$timestamp = $this->filesystem->getTimestamp($file->getPath());
|
178 |
+
$this->assertEquals($timestamp, $file->getTimestamp());
|
179 |
+
}
|
180 |
+
|
181 |
+
public function testMimetype()
|
182 |
+
{
|
183 |
+
$file = $this->getFile();
|
184 |
+
$mimetype = $this->filesystem->getMimetype($file->getPath());
|
185 |
+
$this->assertEquals($mimetype, $file->getMimetype());
|
186 |
+
}
|
187 |
+
|
188 |
+
public function testVisibility()
|
189 |
+
{
|
190 |
+
$file = $this->getFile();
|
191 |
+
$visibility = $this->filesystem->getVisibility($file->getPath());
|
192 |
+
$this->assertEquals($visibility, $file->getVisibility());
|
193 |
+
}
|
194 |
+
|
195 |
+
public function testMetadata()
|
196 |
+
{
|
197 |
+
$file = $this->getFile();
|
198 |
+
$metadata = $this->filesystem->getMetadata($file->getPath());
|
199 |
+
$this->assertEquals($metadata, $file->getMetadata());
|
200 |
+
}
|
201 |
+
|
202 |
+
public function testSize()
|
203 |
+
{
|
204 |
+
$file = $this->getFile();
|
205 |
+
$size = $this->filesystem->getSize($file->getPath());
|
206 |
+
$this->assertEquals($size, $file->getSize());
|
207 |
+
}
|
208 |
+
|
209 |
+
public function testDelete()
|
210 |
+
{
|
211 |
+
$file = $this->getFile();
|
212 |
+
$file->delete();
|
213 |
+
$this->assertFalse($this->filesystem->has('file.txt'));
|
214 |
+
}
|
215 |
+
}
|
vendor/league/flysystem/tests/FilesystemTests.php
ADDED
@@ -0,0 +1,466 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Config;
|
4 |
+
use League\Flysystem\FileNotFoundException;
|
5 |
+
use League\Flysystem\Filesystem;
|
6 |
+
use League\Flysystem\Util;
|
7 |
+
use Prophecy\Argument;
|
8 |
+
use Prophecy\Argument\Token\TypeToken;
|
9 |
+
use Prophecy\Prophecy\ObjectProphecy;
|
10 |
+
use PHPUnit\Framework\TestCase;
|
11 |
+
|
12 |
+
class FilesystemTests extends TestCase
|
13 |
+
{
|
14 |
+
use \PHPUnitHacks;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @var ObjectProphecy
|
18 |
+
*/
|
19 |
+
protected $prophecy;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var AdapterInterface
|
23 |
+
*/
|
24 |
+
protected $adapter;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var Filesystem
|
28 |
+
*/
|
29 |
+
protected $filesystem;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var TypeToken
|
33 |
+
*/
|
34 |
+
protected $config;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var Config
|
38 |
+
*/
|
39 |
+
private $filesystemConfig;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @before
|
43 |
+
*/
|
44 |
+
public function setupAdapter()
|
45 |
+
{
|
46 |
+
$this->prophecy = $this->prophesize('League\\Flysystem\\AdapterInterface');
|
47 |
+
$this->adapter = $this->prophecy->reveal();
|
48 |
+
$this->filesystemConfig = new Config();
|
49 |
+
$this->filesystem = new Filesystem($this->adapter, $this->filesystemConfig);
|
50 |
+
$this->config = Argument::type('League\\Flysystem\\Config');
|
51 |
+
}
|
52 |
+
|
53 |
+
public function testGetAdapter()
|
54 |
+
{
|
55 |
+
$this->assertEquals($this->adapter, $this->filesystem->getAdapter());
|
56 |
+
}
|
57 |
+
|
58 |
+
public function testGetConfig()
|
59 |
+
{
|
60 |
+
$this->assertInstanceOf('League\\Flysystem\\Config', $this->filesystem->getConfig());
|
61 |
+
}
|
62 |
+
|
63 |
+
public function testHas()
|
64 |
+
{
|
65 |
+
$this->prophecy->has('path.txt')->willReturn(true);
|
66 |
+
$this->assertTrue($this->filesystem->has('path.txt'));
|
67 |
+
}
|
68 |
+
|
69 |
+
public function testWrite()
|
70 |
+
{
|
71 |
+
$path = 'path.txt';
|
72 |
+
$contents = 'contents';
|
73 |
+
$this->prophecy->has($path)->willReturn(false);
|
74 |
+
$this->prophecy->write($path, $contents, $this->config)->willReturn(compact('path', 'contents'));
|
75 |
+
$this->assertTrue($this->filesystem->write($path, $contents));
|
76 |
+
}
|
77 |
+
|
78 |
+
public function testWriteWithoutAsserts()
|
79 |
+
{
|
80 |
+
$this->filesystemConfig->set('disable_asserts', true);
|
81 |
+
$path = 'path.txt';
|
82 |
+
$contents = 'contents';
|
83 |
+
$this->prophecy->write($path, $contents, $this->config)->willReturn(compact('path', 'contents'));
|
84 |
+
$this->assertTrue($this->filesystem->write($path, $contents));
|
85 |
+
}
|
86 |
+
|
87 |
+
public function testWriteStream()
|
88 |
+
{
|
89 |
+
$path = 'path.txt';
|
90 |
+
$stream = tmpfile();
|
91 |
+
$this->prophecy->has($path)->willReturn(false);
|
92 |
+
$this->prophecy->writeStream($path, $stream, $this->config)->willReturn(compact('path'));
|
93 |
+
$this->assertTrue($this->filesystem->writeStream($path, $stream));
|
94 |
+
fclose($stream);
|
95 |
+
}
|
96 |
+
|
97 |
+
public function testUpdate()
|
98 |
+
{
|
99 |
+
$path = 'path.txt';
|
100 |
+
$contents = 'contents';
|
101 |
+
$this->prophecy->has($path)->willReturn(true);
|
102 |
+
$this->prophecy->update($path, $contents, $this->config)->willReturn(compact('path', 'contents'));
|
103 |
+
$this->assertTrue($this->filesystem->update($path, $contents));
|
104 |
+
}
|
105 |
+
|
106 |
+
public function testUpdateStream()
|
107 |
+
{
|
108 |
+
$path = 'path.txt';
|
109 |
+
$stream = tmpfile();
|
110 |
+
$this->prophecy->has($path)->willReturn(true);
|
111 |
+
$this->prophecy->updateStream($path, $stream, $this->config)->willReturn(compact('path'));
|
112 |
+
$this->assertTrue($this->filesystem->updateStream($path, $stream));
|
113 |
+
fclose($stream);
|
114 |
+
}
|
115 |
+
|
116 |
+
public function testPutNew()
|
117 |
+
{
|
118 |
+
$path = 'path.txt';
|
119 |
+
$contents = 'contents';
|
120 |
+
$this->prophecy->has($path)->willReturn(false);
|
121 |
+
$this->prophecy->write($path, $contents, $this->config)->willReturn(compact('path', 'contents'));
|
122 |
+
$this->assertTrue($this->filesystem->put($path, $contents));
|
123 |
+
}
|
124 |
+
|
125 |
+
public function testPutNewStream()
|
126 |
+
{
|
127 |
+
$path = 'path.txt';
|
128 |
+
$stream = tmpfile();
|
129 |
+
$this->prophecy->has($path)->willReturn(false);
|
130 |
+
$this->prophecy->writeStream($path, $stream, $this->config)->willReturn(compact('path'));
|
131 |
+
$this->assertTrue($this->filesystem->putStream($path, $stream));
|
132 |
+
fclose($stream);
|
133 |
+
}
|
134 |
+
|
135 |
+
public function testPutUpdate()
|
136 |
+
{
|
137 |
+
$path = 'path.txt';
|
138 |
+
$contents = 'contents';
|
139 |
+
$this->prophecy->has($path)->willReturn(true);
|
140 |
+
$this->prophecy->update($path, $contents, $this->config)->willReturn(compact('path', 'contents'));
|
141 |
+
$this->assertTrue($this->filesystem->put($path, $contents));
|
142 |
+
}
|
143 |
+
|
144 |
+
public function testPutUpdateStream()
|
145 |
+
{
|
146 |
+
$path = 'path.txt';
|
147 |
+
$stream = tmpfile();
|
148 |
+
$this->prophecy->has($path)->willReturn(true);
|
149 |
+
$this->prophecy->updateStream($path, $stream, $this->config)->willReturn(compact('path'));
|
150 |
+
$this->assertTrue($this->filesystem->putStream($path, $stream));
|
151 |
+
fclose($stream);
|
152 |
+
}
|
153 |
+
|
154 |
+
public function testPutStreamInvalid()
|
155 |
+
{
|
156 |
+
$this->expectException('InvalidArgumentException');
|
157 |
+
$this->filesystem->putStream('path.txt', '__INVALID__');
|
158 |
+
}
|
159 |
+
|
160 |
+
public function testWriteStreamInvalid()
|
161 |
+
{
|
162 |
+
$this->expectException('InvalidArgumentException');
|
163 |
+
$this->filesystem->writeStream('path.txt', '__INVALID__');
|
164 |
+
}
|
165 |
+
|
166 |
+
public function testUpdateStreamInvalid()
|
167 |
+
{
|
168 |
+
$this->expectException('InvalidArgumentException');
|
169 |
+
$this->filesystem->updateStream('path.txt', '__INVALID__');
|
170 |
+
}
|
171 |
+
|
172 |
+
public function testReadAndDelete()
|
173 |
+
{
|
174 |
+
$path = 'path.txt';
|
175 |
+
$output = '__CONTENTS__';
|
176 |
+
$this->prophecy->has($path)->willReturn(true);
|
177 |
+
$this->prophecy->read($path)->willReturn(['contents' => $output]);
|
178 |
+
$this->prophecy->delete($path)->willReturn(true);
|
179 |
+
$response = $this->filesystem->readAndDelete($path);
|
180 |
+
$this->assertEquals($output, $response);
|
181 |
+
}
|
182 |
+
|
183 |
+
public function testReadAndDeleteFailedRead()
|
184 |
+
{
|
185 |
+
$path = 'path.txt';
|
186 |
+
$this->prophecy->has($path)->willReturn(true);
|
187 |
+
$this->prophecy->read($path)->willReturn(false);
|
188 |
+
$response = $this->filesystem->readAndDelete($path);
|
189 |
+
$this->assertFalse($response);
|
190 |
+
}
|
191 |
+
|
192 |
+
public function testRead()
|
193 |
+
{
|
194 |
+
$path = 'path.txt';
|
195 |
+
$output = '__CONTENTS__';
|
196 |
+
$this->prophecy->has($path)->willReturn(true);
|
197 |
+
$this->prophecy->read($path)->willReturn(['contents' => $output]);
|
198 |
+
$response = $this->filesystem->read($path);
|
199 |
+
$this->assertEquals($response, $output);
|
200 |
+
}
|
201 |
+
|
202 |
+
public function testReadStream()
|
203 |
+
{
|
204 |
+
$path = 'path.txt';
|
205 |
+
$output = '__CONTENTS__';
|
206 |
+
$this->prophecy->has($path)->willReturn(true);
|
207 |
+
$this->prophecy->readStream($path)->willReturn(['stream' => $output]);
|
208 |
+
$response = $this->filesystem->readStream($path);
|
209 |
+
$this->assertEquals($response, $output);
|
210 |
+
}
|
211 |
+
|
212 |
+
public function testReadStreamFail()
|
213 |
+
{
|
214 |
+
$path = 'path.txt';
|
215 |
+
$this->prophecy->has($path)->willReturn(true);
|
216 |
+
$this->prophecy->readStream($path)->willReturn(false);
|
217 |
+
$response = $this->filesystem->readStream($path);
|
218 |
+
$this->assertFalse($response);
|
219 |
+
}
|
220 |
+
|
221 |
+
public function testRename()
|
222 |
+
{
|
223 |
+
$old = 'old.txt';
|
224 |
+
$new = 'new.txt';
|
225 |
+
$this->prophecy->has(Argument::any())->willReturn(true, false);
|
226 |
+
$this->prophecy->rename($old, $new)->willReturn(true);
|
227 |
+
$response = $this->filesystem->rename($old, $new);
|
228 |
+
$this->assertTrue($response);
|
229 |
+
}
|
230 |
+
|
231 |
+
public function testCopy()
|
232 |
+
{
|
233 |
+
$old = 'old.txt';
|
234 |
+
$new = 'new.txt';
|
235 |
+
$this->prophecy->has(Argument::any())->willReturn(true, false);
|
236 |
+
$this->prophecy->copy($old, $new)->willReturn(true);
|
237 |
+
$response = $this->filesystem->copy($old, $new);
|
238 |
+
$this->assertTrue($response);
|
239 |
+
}
|
240 |
+
|
241 |
+
public function testCopyWithoutAsserts()
|
242 |
+
{
|
243 |
+
$old = 'old.txt';
|
244 |
+
$new = 'new.txt';
|
245 |
+
$this->filesystemConfig->set('disable_asserts', true);
|
246 |
+
$this->prophecy->copy($old, $new)->willReturn(true);
|
247 |
+
$response = $this->filesystem->copy($old, $new);
|
248 |
+
$this->assertTrue($response);
|
249 |
+
}
|
250 |
+
|
251 |
+
public function testDeleteDirRootViolation()
|
252 |
+
{
|
253 |
+
$this->expectException('League\Flysystem\RootViolationException');
|
254 |
+
$this->filesystem->deleteDir('');
|
255 |
+
}
|
256 |
+
|
257 |
+
public function testDeleteDir()
|
258 |
+
{
|
259 |
+
$this->prophecy->deleteDir('dirname')->willReturn(true);
|
260 |
+
$response = $this->filesystem->deleteDir('dirname');
|
261 |
+
$this->assertTrue($response);
|
262 |
+
}
|
263 |
+
|
264 |
+
public function testCreateDir()
|
265 |
+
{
|
266 |
+
$this->prophecy->createDir('dirname', $this->config)->willReturn(['path' => 'dirname', 'type' => 'dir']);
|
267 |
+
$output = $this->filesystem->createDir('dirname');
|
268 |
+
$this->assertTrue($output);
|
269 |
+
}
|
270 |
+
|
271 |
+
public function metaGetterProvider()
|
272 |
+
{
|
273 |
+
return [
|
274 |
+
['getSize', 1234],
|
275 |
+
['getVisibility', 'public'],
|
276 |
+
['getMimetype', 'text/plain'],
|
277 |
+
['getTimestamp', 2345],
|
278 |
+
['getMetadata', [
|
279 |
+
'path' => 'success.txt',
|
280 |
+
'size' => 1234,
|
281 |
+
'visibility' => 'public',
|
282 |
+
'mimetype' => 'text/plain',
|
283 |
+
'timestamp' => 2345,
|
284 |
+
]],
|
285 |
+
];
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* @dataProvider metaGetterProvider
|
290 |
+
*/
|
291 |
+
public function testMetaGetterSuccess($method, $value)
|
292 |
+
{
|
293 |
+
$path = 'success.txt';
|
294 |
+
$this->prophecy->has($path)->willReturn(true);
|
295 |
+
$this->prophecy->{$method}($path)->willReturn([
|
296 |
+
'path' => $path,
|
297 |
+
'size' => 1234,
|
298 |
+
'visibility' => 'public',
|
299 |
+
'mimetype' => 'text/plain',
|
300 |
+
'timestamp' => 2345,
|
301 |
+
]);
|
302 |
+
$output = $this->filesystem->{$method}($path);
|
303 |
+
$this->assertEquals($value, $output);
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* @dataProvider metaGetterProvider
|
308 |
+
*/
|
309 |
+
public function testMetaGetterFails($method)
|
310 |
+
{
|
311 |
+
$path = 'success.txt';
|
312 |
+
$this->prophecy->has($path)->willReturn(true);
|
313 |
+
$this->prophecy->{$method}($path)->willReturn(false);
|
314 |
+
$output = $this->filesystem->{$method}($path);
|
315 |
+
$this->assertFalse($output);
|
316 |
+
}
|
317 |
+
|
318 |
+
public function testGetSizeOnFileThatDoesNotExist()
|
319 |
+
{
|
320 |
+
$this->expectException(FileNotFoundException::class);
|
321 |
+
$this->prophecy->has('path.txt')->willReturn(false);
|
322 |
+
$this->filesystem->getSize('path.txt');
|
323 |
+
}
|
324 |
+
|
325 |
+
public function testAssertPresentThrowsException()
|
326 |
+
{
|
327 |
+
$this->expectException('League\Flysystem\FileExistsException');
|
328 |
+
$this->prophecy->has('path.txt')->willReturn(true);
|
329 |
+
$this->filesystem->write('path.txt', 'contents');
|
330 |
+
}
|
331 |
+
|
332 |
+
public function testAssertAbsentThrowsException()
|
333 |
+
{
|
334 |
+
$this->expectException('League\Flysystem\FileNotFoundException');
|
335 |
+
$this->prophecy->has('path.txt')->willReturn(false);
|
336 |
+
$this->filesystem->read('path.txt');
|
337 |
+
}
|
338 |
+
|
339 |
+
public function testSetVisibility()
|
340 |
+
{
|
341 |
+
$path = 'path.txt';
|
342 |
+
$this->prophecy->has($path)->willReturn(true);
|
343 |
+
$this->prophecy->setVisibility($path, 'public')->willReturn(['path' => $path, 'visibility' => 'public']);
|
344 |
+
$output = $this->filesystem->setVisibility($path, 'public');
|
345 |
+
$this->assertTrue($output);
|
346 |
+
}
|
347 |
+
|
348 |
+
public function testSetVisibilityOnFileThatDoesNotExist()
|
349 |
+
{
|
350 |
+
$this->expectException(FileNotFoundException::class);
|
351 |
+
$this->prophecy->has('path.txt')->willReturn(false);
|
352 |
+
$this->filesystem->setVisibility('path.txt', 'public');
|
353 |
+
}
|
354 |
+
|
355 |
+
public function testSetVisibilityFail()
|
356 |
+
{
|
357 |
+
$path = 'path.txt';
|
358 |
+
$this->prophecy->has($path)->willReturn(true);
|
359 |
+
$this->prophecy->setVisibility($path, 'public')->willReturn(false);
|
360 |
+
$output = $this->filesystem->setVisibility($path, 'public');
|
361 |
+
$this->assertFalse($output);
|
362 |
+
}
|
363 |
+
|
364 |
+
public function testGetFile()
|
365 |
+
{
|
366 |
+
$path = 'path.txt';
|
367 |
+
$this->prophecy->has($path)->willReturn(true);
|
368 |
+
$this->prophecy->getMetadata($path)->willReturn([
|
369 |
+
'path' => $path,
|
370 |
+
'type' => 'file',
|
371 |
+
]);
|
372 |
+
|
373 |
+
$output = $this->filesystem->get($path);
|
374 |
+
$this->assertInstanceOf('League\Flysystem\File', $output);
|
375 |
+
}
|
376 |
+
|
377 |
+
public function testGetDirectory()
|
378 |
+
{
|
379 |
+
$path = 'path';
|
380 |
+
$this->prophecy->has($path)->willReturn(true);
|
381 |
+
$this->prophecy->getMetadata($path)->willReturn([
|
382 |
+
'path' => $path,
|
383 |
+
'type' => 'dir',
|
384 |
+
]);
|
385 |
+
|
386 |
+
$output = $this->filesystem->get($path);
|
387 |
+
$this->assertInstanceOf('League\Flysystem\Directory', $output);
|
388 |
+
}
|
389 |
+
|
390 |
+
public function testListContents()
|
391 |
+
{
|
392 |
+
$rawListing = [
|
393 |
+
['path' => 'other_root/file.txt'],
|
394 |
+
['path' => 'valid/to_deep/file.txt'],
|
395 |
+
['path' => 'valid/file.txt'],
|
396 |
+
['path' => 'valid/a-valid-file.txt'],
|
397 |
+
];
|
398 |
+
|
399 |
+
$expected = [
|
400 |
+
Util::pathinfo('valid/a-valid-file.txt'),
|
401 |
+
Util::pathinfo('valid/file.txt'),
|
402 |
+
];
|
403 |
+
|
404 |
+
$this->prophecy->listContents('valid', false)->willReturn($rawListing);
|
405 |
+
$output = $this->filesystem->listContents('valid', false);
|
406 |
+
$this->assertEquals($expected, $output);
|
407 |
+
}
|
408 |
+
|
409 |
+
public function testListContentZeroName()
|
410 |
+
{
|
411 |
+
$rawListing = [
|
412 |
+
// files
|
413 |
+
['path' => 0],
|
414 |
+
['path' => '0'],
|
415 |
+
['path' => ''],
|
416 |
+
// directories
|
417 |
+
['path' => 0, 'type' => 'dir'],
|
418 |
+
['path' => '0', 'type' => 'dir'],
|
419 |
+
['path' => '', 'type' => 'dir']
|
420 |
+
];
|
421 |
+
$this->prophecy->listContents('', false)->willReturn($rawListing);
|
422 |
+
$output = $this->filesystem->listContents('', false);
|
423 |
+
$this->assertCount(2, $output);
|
424 |
+
}
|
425 |
+
|
426 |
+
public function testListContentsRecursize()
|
427 |
+
{
|
428 |
+
$rawListing = [
|
429 |
+
['path' => 'other_root/file.txt'],
|
430 |
+
['path' => 'valid/to_deep/file.txt'],
|
431 |
+
['path' => 'valid/file.txt'],
|
432 |
+
['path' => 'valid/a-valid-file.txt'],
|
433 |
+
];
|
434 |
+
$expected = [
|
435 |
+
Util::pathinfo('valid/a-valid-file.txt'),
|
436 |
+
Util::pathinfo('valid/file.txt'),
|
437 |
+
Util::pathinfo('valid/to_deep/file.txt'),
|
438 |
+
];
|
439 |
+
$this->prophecy->listContents('valid', true)->willReturn($rawListing);
|
440 |
+
$output = $this->filesystem->listContents('valid', true);
|
441 |
+
$this->assertEquals($expected, $output);
|
442 |
+
|
443 |
+
$expected = [
|
444 |
+
Util::pathinfo('other_root/file.txt'),
|
445 |
+
Util::pathinfo('valid/a-valid-file.txt'),
|
446 |
+
Util::pathinfo('valid/file.txt'),
|
447 |
+
Util::pathinfo('valid/to_deep/file.txt'),
|
448 |
+
];
|
449 |
+
$this->prophecy->listContents('', true)->willReturn($rawListing);
|
450 |
+
$output = $this->filesystem->listContents('', true);
|
451 |
+
$this->assertEquals($expected, $output);
|
452 |
+
}
|
453 |
+
public function testListContentsSubDirectoryMatches()
|
454 |
+
{
|
455 |
+
$rawListing = [['path' => 'a/dir/file.txt']];
|
456 |
+
$this->prophecy->listContents('dir', true)->willReturn($rawListing);
|
457 |
+
$output = $this->filesystem->listContents('dir', true);
|
458 |
+
$this->assertEquals([], $output);
|
459 |
+
}
|
460 |
+
|
461 |
+
public function testInvalidPluginCall()
|
462 |
+
{
|
463 |
+
$this->expectException('BadMethodCallException');
|
464 |
+
$this->filesystem->invalidCall();
|
465 |
+
}
|
466 |
+
}
|
vendor/league/flysystem/tests/FlysystemStreamTests.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Filesystem;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
use Prophecy\Argument;
|
6 |
+
|
7 |
+
class FlysystemStreamTests extends TestCase
|
8 |
+
{
|
9 |
+
use \PHPUnitHacks;
|
10 |
+
|
11 |
+
public function testWriteStream()
|
12 |
+
{
|
13 |
+
$stream = tmpfile();
|
14 |
+
$adapter = $this->prophesize('League\Flysystem\AdapterInterface');
|
15 |
+
$adapter->has('file.txt')->willReturn(false)->shouldBeCalled();
|
16 |
+
$adapter->writeStream('file.txt', $stream, Argument::type('League\Flysystem\Config'))
|
17 |
+
->willReturn(['path' => 'file.txt'], false)
|
18 |
+
->shouldBeCalled();
|
19 |
+
$filesystem = new Filesystem($adapter->reveal());
|
20 |
+
$this->assertTrue($filesystem->writeStream('file.txt', $stream));
|
21 |
+
$this->assertFalse($filesystem->writeStream('file.txt', $stream));
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @expectedException InvalidArgumentException
|
26 |
+
*/
|
27 |
+
public function testWriteStreamFail()
|
28 |
+
{
|
29 |
+
$filesystem = new Filesystem($this->createMock('League\Flysystem\AdapterInterface'));
|
30 |
+
$filesystem->writeStream('file.txt', 'not a resource');
|
31 |
+
}
|
32 |
+
|
33 |
+
public function testUpdateStream()
|
34 |
+
{
|
35 |
+
$stream = tmpfile();
|
36 |
+
$adapter = $this->prophesize('League\Flysystem\AdapterInterface');
|
37 |
+
$adapter->has('file.txt')->willReturn(true)->shouldBeCalled();
|
38 |
+
|
39 |
+
$adapter->updateStream('file.txt', $stream, Argument::type('League\Flysystem\Config'))
|
40 |
+
->willReturn(['path' => 'file.txt'], false)
|
41 |
+
->shouldBeCalled();
|
42 |
+
|
43 |
+
$filesystem = new Filesystem($adapter->reveal());
|
44 |
+
|
45 |
+
$this->assertTrue($filesystem->updateStream('file.txt', $stream));
|
46 |
+
$this->assertFalse($filesystem->updateStream('file.txt', $stream));
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @expectedException InvalidArgumentException
|
51 |
+
*/
|
52 |
+
public function testUpdateStreamFail()
|
53 |
+
{
|
54 |
+
$filesystem = new Filesystem($this->createMock('League\Flysystem\AdapterInterface'));
|
55 |
+
$filesystem->updateStream('file.txt', 'not a resource');
|
56 |
+
}
|
57 |
+
|
58 |
+
public function testReadStream()
|
59 |
+
{
|
60 |
+
$adapter = $this->prophesize('League\Flysystem\AdapterInterface');
|
61 |
+
$adapter->has(Argument::type('string'))->willReturn(true)->shouldBeCalled();
|
62 |
+
$stream = tmpfile();
|
63 |
+
$adapter->readStream('file.txt')->willReturn(['stream' => $stream])->shouldBeCalled();
|
64 |
+
$adapter->readStream('other.txt')->willReturn(false)->shouldBeCalled();
|
65 |
+
$filesystem = new Filesystem($adapter->reveal());
|
66 |
+
$this->assertInternalType('resource', $filesystem->readStream('file.txt'));
|
67 |
+
$this->assertFalse($filesystem->readStream('other.txt'));
|
68 |
+
fclose($stream);
|
69 |
+
$this->assertFalse($filesystem->readStream('other.txt'));
|
70 |
+
}
|
71 |
+
}
|
vendor/league/flysystem/tests/ForcedCopyPluginTests.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Plugin\ForcedCopy;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class ForcedCopyPluginTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
protected $filesystem;
|
11 |
+
protected $plugin;
|
12 |
+
|
13 |
+
public function setUp()
|
14 |
+
{
|
15 |
+
$this->filesystem = $this->prophesize('League\Flysystem\FilesystemInterface');
|
16 |
+
$this->plugin = new ForcedCopy();
|
17 |
+
$this->plugin->setFilesystem($this->filesystem->reveal());
|
18 |
+
}
|
19 |
+
|
20 |
+
public function testPluginSuccess()
|
21 |
+
{
|
22 |
+
$this->assertSame('forceCopy', $this->plugin->getMethod());
|
23 |
+
|
24 |
+
$this->filesystem->delete('newpath')->willReturn(true)->shouldBeCalled();
|
25 |
+
$this->filesystem->copy('path', 'newpath')->willReturn(true)->shouldBeCalled();
|
26 |
+
|
27 |
+
$this->assertTrue($this->plugin->handle('path', 'newpath'));
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testPluginDeleteNotExists()
|
31 |
+
{
|
32 |
+
$this->filesystem->delete('newpath')
|
33 |
+
->willThrow('League\Flysystem\FileNotFoundException', 'newpath')
|
34 |
+
->shouldBeCalled();
|
35 |
+
|
36 |
+
$this->filesystem->copy('path', 'newpath')->willReturn(true)->shouldBeCalled();
|
37 |
+
|
38 |
+
$this->assertTrue($this->plugin->handle('path', 'newpath'));
|
39 |
+
}
|
40 |
+
|
41 |
+
public function testPluginDeleteFail()
|
42 |
+
{
|
43 |
+
$this->filesystem->delete('newpath')->willReturn(false)->shouldBeCalled();
|
44 |
+
$this->assertFalse($this->plugin->handle('path', 'newpath'));
|
45 |
+
}
|
46 |
+
}
|
vendor/league/flysystem/tests/ForcedRenamePluginTests.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Plugin\ForcedRename;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class ForcedRenamePluginTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
protected $filesystem;
|
11 |
+
protected $plugin;
|
12 |
+
|
13 |
+
public function setUp()
|
14 |
+
{
|
15 |
+
$this->filesystem = $this->prophesize('League\Flysystem\FilesystemInterface');
|
16 |
+
$this->plugin = new ForcedRename();
|
17 |
+
$this->plugin->setFilesystem($this->filesystem->reveal());
|
18 |
+
}
|
19 |
+
|
20 |
+
public function testPluginSuccess()
|
21 |
+
{
|
22 |
+
$this->assertSame('forceRename', $this->plugin->getMethod());
|
23 |
+
|
24 |
+
$this->filesystem->delete('newpath')->willReturn(true)->shouldBeCalled();
|
25 |
+
$this->filesystem->rename('path', 'newpath')->willReturn(true)->shouldBeCalled();
|
26 |
+
|
27 |
+
$this->assertTrue($this->plugin->handle('path', 'newpath'));
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testPluginDeleteNotExists()
|
31 |
+
{
|
32 |
+
$this->filesystem->delete('newpath')
|
33 |
+
->willThrow('League\Flysystem\FileNotFoundException', 'newpath')
|
34 |
+
->shouldBeCalled();
|
35 |
+
|
36 |
+
$this->filesystem->rename('path', 'newpath')->willReturn(true)->shouldBeCalled();
|
37 |
+
|
38 |
+
$this->assertTrue($this->plugin->handle('path', 'newpath'));
|
39 |
+
}
|
40 |
+
|
41 |
+
public function testPluginDeleteFail()
|
42 |
+
{
|
43 |
+
$this->filesystem->delete('newpath')->willReturn(false)->shouldBeCalled();
|
44 |
+
$this->assertFalse($this->plugin->handle('path', 'newpath'));
|
45 |
+
}
|
46 |
+
}
|
vendor/league/flysystem/tests/FtpTests.php
ADDED
@@ -0,0 +1,820 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use ErrorException;
|
6 |
+
use League\Flysystem\Config;
|
7 |
+
use PHPUnit\Framework\TestCase;
|
8 |
+
|
9 |
+
function ftp_systype($connection)
|
10 |
+
{
|
11 |
+
static $connections = [
|
12 |
+
'reconnect.me',
|
13 |
+
'dont.reconnect.me',
|
14 |
+
];
|
15 |
+
|
16 |
+
if (is_string($connection) && array_key_exists($connection, $connections)) {
|
17 |
+
$connections[$connection]++;
|
18 |
+
|
19 |
+
if (strpos($connection, 'dont') !== false || $connections[$connection] < 2) {
|
20 |
+
return false;
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
return 'LINUX';
|
25 |
+
}
|
26 |
+
|
27 |
+
function ftp_ssl_connect($host)
|
28 |
+
{
|
29 |
+
if ($host === 'fail.me') {
|
30 |
+
return false;
|
31 |
+
}
|
32 |
+
|
33 |
+
if ($host === 'disconnect.check') {
|
34 |
+
return tmpfile();
|
35 |
+
}
|
36 |
+
|
37 |
+
return $host;
|
38 |
+
}
|
39 |
+
|
40 |
+
function ftp_delete($conn, $path)
|
41 |
+
{
|
42 |
+
return ! strpos($path, 'rm.fail.txt');
|
43 |
+
}
|
44 |
+
|
45 |
+
function ftp_rmdir($connection, $dirname)
|
46 |
+
{
|
47 |
+
return strpos($dirname, 'rmdir.fail') === false;
|
48 |
+
}
|
49 |
+
|
50 |
+
function ftp_connect($host)
|
51 |
+
{
|
52 |
+
return ftp_ssl_connect($host);
|
53 |
+
}
|
54 |
+
|
55 |
+
function ftp_pasv($connection)
|
56 |
+
{
|
57 |
+
return $connection !== 'pasv.fail';
|
58 |
+
}
|
59 |
+
|
60 |
+
function ftp_rename()
|
61 |
+
{
|
62 |
+
return true;
|
63 |
+
}
|
64 |
+
|
65 |
+
function ftp_close($connection)
|
66 |
+
{
|
67 |
+
if (is_resource($connection)) {
|
68 |
+
return fclose($connection);
|
69 |
+
}
|
70 |
+
|
71 |
+
return true;
|
72 |
+
}
|
73 |
+
|
74 |
+
function ftp_login($connection)
|
75 |
+
{
|
76 |
+
if ($connection === 'login.fail') {
|
77 |
+
trigger_error('FTP login failed!!', E_WARNING);
|
78 |
+
|
79 |
+
return false;
|
80 |
+
}
|
81 |
+
|
82 |
+
return true;
|
83 |
+
}
|
84 |
+
|
85 |
+
function ftp_chdir($connection, $directory)
|
86 |
+
{
|
87 |
+
if ($connection === 'chdir.fail') {
|
88 |
+
return false;
|
89 |
+
}
|
90 |
+
|
91 |
+
if ($directory === 'not.found') {
|
92 |
+
return false;
|
93 |
+
}
|
94 |
+
|
95 |
+
if ($directory === 'windows.not.found') {
|
96 |
+
return false;
|
97 |
+
}
|
98 |
+
|
99 |
+
if (in_array($directory, ['rawlist-total-0.txt', 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', 'dir1', 'file1.with-total-line.txt', 'file1.with-invalid-line.txt'])) {
|
100 |
+
return false;
|
101 |
+
}
|
102 |
+
|
103 |
+
return $directory !== '0';
|
104 |
+
}
|
105 |
+
|
106 |
+
function ftp_pwd($connection)
|
107 |
+
{
|
108 |
+
return 'dirname';
|
109 |
+
}
|
110 |
+
|
111 |
+
function ftp_raw($connection, $command)
|
112 |
+
{
|
113 |
+
if ($connection === 'utf8.fail') {
|
114 |
+
return [0 => '421 Service not available, closing control connection'];
|
115 |
+
}
|
116 |
+
|
117 |
+
if ($command === 'OPTS UTF8 ON') {
|
118 |
+
return [0 => '200 UTF8 set to on'];
|
119 |
+
}
|
120 |
+
|
121 |
+
if ($command === 'STAT syno.not.found') {
|
122 |
+
return [0 => '211- status of syno.not.found:', 1 => 'ftpd: assd: No such file or directory.' ,2 => '211 End of status'];
|
123 |
+
}
|
124 |
+
|
125 |
+
if ($command === 'syno.unknowndir') {
|
126 |
+
return [0 => '211- status of syno.unknowndir:', 1 => 'ftpd: assd: No such file or directory.' ,2 => '211 End of status'];
|
127 |
+
}
|
128 |
+
|
129 |
+
if (strpos($command, 'unknowndir') !== false) {
|
130 |
+
return false;
|
131 |
+
}
|
132 |
+
|
133 |
+
return [
|
134 |
+
0 => '211-Status of somewhere/folder/dummy.txt:',
|
135 |
+
1 => ' -rw-r--r-- 1 ftp ftp 0 Nov 24 13:59 somewhere/folder/dummy.txt',
|
136 |
+
2 => '211 End of status'
|
137 |
+
];
|
138 |
+
}
|
139 |
+
|
140 |
+
function ftp_rawlist($connection, $directory)
|
141 |
+
{
|
142 |
+
$directory = str_replace("-A ", "", $directory);
|
143 |
+
|
144 |
+
if (getenv('FTP_CLOSE_THROW') === 'DISCONNECT_CATCH') {
|
145 |
+
throw new ErrorException('ftp_rawlist');
|
146 |
+
}
|
147 |
+
|
148 |
+
if (getenv('FTP_CLOSE_THROW') === 'DISCONNECT_RETHROW') {
|
149 |
+
throw new ErrorException('does not contain the correct message');
|
150 |
+
}
|
151 |
+
|
152 |
+
if (strpos($directory, 'recurse.manually/recurse.folder') !== false) {
|
153 |
+
return [
|
154 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
155 |
+
];
|
156 |
+
}
|
157 |
+
|
158 |
+
if (strpos($directory, 'recurse.manually') !== false) {
|
159 |
+
return [
|
160 |
+
'drwxr-xr-x 2 ftp ftp 4096 Nov 24 13:59 recurse.folder',
|
161 |
+
];
|
162 |
+
}
|
163 |
+
|
164 |
+
if (strpos($directory, 'recurse.folder') !== false) {
|
165 |
+
return false;
|
166 |
+
}
|
167 |
+
|
168 |
+
if (strpos($directory, 'fail.rawlist') !== false) {
|
169 |
+
return false;
|
170 |
+
}
|
171 |
+
|
172 |
+
if ($directory === 'not.found') {
|
173 |
+
return false;
|
174 |
+
}
|
175 |
+
|
176 |
+
if ($directory === 'windows.not.found') {
|
177 |
+
return ["File not found"];
|
178 |
+
}
|
179 |
+
|
180 |
+
if (strpos($directory, 'file1.txt') !== false) {
|
181 |
+
return [
|
182 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
183 |
+
];
|
184 |
+
}
|
185 |
+
|
186 |
+
if ($directory === '0') {
|
187 |
+
return [
|
188 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 0',
|
189 |
+
];
|
190 |
+
}
|
191 |
+
|
192 |
+
if (strpos($directory, 'file2.txt') !== false) {
|
193 |
+
return [
|
194 |
+
'05-23-15 12:09PM 684 file2.txt',
|
195 |
+
];
|
196 |
+
}
|
197 |
+
|
198 |
+
if (strpos($directory, 'file3.txt') !== false) {
|
199 |
+
return [
|
200 |
+
'06-09-2016 12:09PM 684 file3.txt',
|
201 |
+
];
|
202 |
+
}
|
203 |
+
|
204 |
+
if (strpos($directory, 'file4.txt') !== false) {
|
205 |
+
return [
|
206 |
+
'2016-05-23 12:09PM 684 file4.txt',
|
207 |
+
];
|
208 |
+
}
|
209 |
+
|
210 |
+
if (strpos($directory, 'dir1') !== false) {
|
211 |
+
return [
|
212 |
+
'2015-05-23 12:09 <DIR> dir1',
|
213 |
+
];
|
214 |
+
}
|
215 |
+
|
216 |
+
if (strpos($directory, 'rmdir.nested.fail') !== false) {
|
217 |
+
return [
|
218 |
+
'drwxr-xr-x 2 ftp ftp 4096 Oct 13 2012 .',
|
219 |
+
'drwxr-xr-x 4 ftp ftp 4096 Nov 24 13:58 ..',
|
220 |
+
'-rw-r--r-- 1 ftp ftp 409 Oct 13 2012 rm.fail.txt',
|
221 |
+
];
|
222 |
+
}
|
223 |
+
|
224 |
+
if (strpos($directory, 'lastfiledir') !== false) {
|
225 |
+
return [
|
226 |
+
'drwxr-xr-x 2 ftp ftp 4096 Feb 6 2012 .',
|
227 |
+
'drwxr-xr-x 4 ftp ftp 4096 Feb 6 13:58 ..',
|
228 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
229 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 14 09:01 file2.txt',
|
230 |
+
'-rw-r--r-- 1 ftp ftp 409 Feb 6 10:06 file3.txt',
|
231 |
+
'-rw-r--r-- 1 ftp ftp 409 Mar 20 2014 file4.txt',
|
232 |
+
];
|
233 |
+
}
|
234 |
+
|
235 |
+
if (strpos($directory, 'spaced.files') !== false) {
|
236 |
+
return [
|
237 |
+
'drwxr-xr-x 2 ftp ftp 4096 Feb 6 2012 .',
|
238 |
+
'drwxr-xr-x 4 ftp ftp 4096 Feb 6 13:58 ..',
|
239 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
240 |
+
|
241 |
+
];
|
242 |
+
}
|
243 |
+
|
244 |
+
if (strpos($directory, 'file1.with-total-line.txt') !== false) {
|
245 |
+
return [
|
246 |
+
'total 1',
|
247 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
248 |
+
];
|
249 |
+
}
|
250 |
+
|
251 |
+
if (strpos($directory, 'rawlist-total-0.txt') !== false) {
|
252 |
+
return [
|
253 |
+
'total 0',
|
254 |
+
];
|
255 |
+
}
|
256 |
+
|
257 |
+
if (strpos($directory, 'file1.with-invalid-line.txt') !== false) {
|
258 |
+
return [
|
259 |
+
'invalid line',
|
260 |
+
'-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt',
|
261 |
+
];
|
262 |
+
}
|
263 |
+
|
264 |
+
if (strpos($directory, 'some.nested/rmdir.fail') !== false || strpos($directory, 'somewhere/cgi-bin') !== false) {
|
265 |
+
return [
|
266 |
+
'drwxr-xr-x 2 ftp ftp 4096 Oct 13 2012 .',
|
267 |
+
'drwxr-xr-x 4 ftp ftp 4096 Nov 24 13:58 ..',
|
268 |
+
];
|
269 |
+
}
|
270 |
+
|
271 |
+
if (strpos($directory, 'some.nested') !== false) {
|
272 |
+
return ['drwxr-xr-x 1 ftp ftp 409 Aug 19 09:01 rmdir.fail'];
|
273 |
+
}
|
274 |
+
|
275 |
+
if (strpos($directory, 'somewhere/folder') !== false) {
|
276 |
+
return ['-rw-r--r-- 1 ftp ftp 0 Nov 24 13:59 dummy.txt'];
|
277 |
+
}
|
278 |
+
|
279 |
+
return [
|
280 |
+
'drwxr-xr-x 4 ftp ftp 4096 Nov 24 13:58 .',
|
281 |
+
'drwxr-xr-x 16 ftp ftp 4096 Sep 2 13:01 ..',
|
282 |
+
'drwxr-xr-x 2 ftp ftp 4096 Oct 13 2012 cgi-bin',
|
283 |
+
'drwxr-xr-x 2 ftp ftp 4096 Nov 24 13:59 folder',
|
284 |
+
'-rw-r--r-- 1 ftp ftp 409 Oct 13 2012 index.html',
|
285 |
+
'',
|
286 |
+
'somewhere/cgi-bin:',
|
287 |
+
'drwxr-xr-x 2 ftp ftp 4096 Oct 13 2012 .',
|
288 |
+
'drwxr-xr-x 4 ftp ftp 4096 Nov 24 13:58 ..',
|
289 |
+
'',
|
290 |
+
'somewhere/folder:',
|
291 |
+
'drwxr-xr-x 2 ftp ftp 4096 Nov 24 13:59 .',
|
292 |
+
'drwxr-xr-x 4 ftp ftp 4096 Nov 24 13:58 ..',
|
293 |
+
'-rw-r--r-- 1 ftp ftp 0 Nov 24 13:59 dummy.txt',
|
294 |
+
];
|
295 |
+
}
|
296 |
+
|
297 |
+
function ftp_mdtm($connection, $path)
|
298 |
+
{
|
299 |
+
switch ($path) {
|
300 |
+
case 'lastfiledir/file1.txt':
|
301 |
+
return 1408438882;
|
302 |
+
break;
|
303 |
+
|
304 |
+
case 'lastfiledir/file2.txt':
|
305 |
+
return 1408006883;
|
306 |
+
break;
|
307 |
+
|
308 |
+
case 'lastfiledir/file3.txt':
|
309 |
+
return 1423217165;
|
310 |
+
break;
|
311 |
+
|
312 |
+
case 'lastfiledir/file4.txt':
|
313 |
+
return 1395305765;
|
314 |
+
break;
|
315 |
+
|
316 |
+
case 'some/file.ext':
|
317 |
+
return 1408438882;
|
318 |
+
break;
|
319 |
+
default:
|
320 |
+
return -1;
|
321 |
+
break;
|
322 |
+
}
|
323 |
+
}
|
324 |
+
|
325 |
+
function ftp_mkdir($connection, $dirname)
|
326 |
+
{
|
327 |
+
return strpos($dirname, 'mkdir.fail') === false;
|
328 |
+
}
|
329 |
+
|
330 |
+
function ftp_fput($connection, $path)
|
331 |
+
{
|
332 |
+
return strpos($path, 'write.fail') === false;
|
333 |
+
}
|
334 |
+
|
335 |
+
function ftp_fget($connection, $resource, $path)
|
336 |
+
{
|
337 |
+
if (strpos($path, 'not.found') !== false) {
|
338 |
+
return false;
|
339 |
+
}
|
340 |
+
|
341 |
+
\fwrite($resource, 'contents');
|
342 |
+
rewind($resource);
|
343 |
+
|
344 |
+
return true;
|
345 |
+
}
|
346 |
+
|
347 |
+
function ftp_nlist($connection, $directory)
|
348 |
+
{
|
349 |
+
return ['./some.nested'];
|
350 |
+
}
|
351 |
+
|
352 |
+
function ftp_chmod($connection, $mode, $path)
|
353 |
+
{
|
354 |
+
return strpos($path, 'chmod.fail') === false;
|
355 |
+
}
|
356 |
+
|
357 |
+
function ftp_set_option($connection, $option, $value)
|
358 |
+
{
|
359 |
+
putenv('USE_PASSV_ADDREESS' . $option . '=' . ($value ? 'YES' : 'NO'));
|
360 |
+
|
361 |
+
return true;
|
362 |
+
}
|
363 |
+
|
364 |
+
class FtpTests extends TestCase
|
365 |
+
{
|
366 |
+
use \PHPUnitHacks;
|
367 |
+
|
368 |
+
protected $options = [
|
369 |
+
'host' => 'example.org',
|
370 |
+
'port' => 40,
|
371 |
+
'ssl' => true,
|
372 |
+
'timeout' => 35,
|
373 |
+
'root' => '/somewhere',
|
374 |
+
'permPublic' => 0777,
|
375 |
+
'permPrivate' => 0000,
|
376 |
+
'passive' => false,
|
377 |
+
'username' => 'user',
|
378 |
+
'password' => 'password',
|
379 |
+
'recurseManually' => false,
|
380 |
+
];
|
381 |
+
|
382 |
+
public function setUp()
|
383 |
+
{
|
384 |
+
putenv('FTP_CLOSE_THROW=nope');
|
385 |
+
}
|
386 |
+
|
387 |
+
public function testInstantiable()
|
388 |
+
{
|
389 |
+
if ( ! defined('FTP_BINARY')) {
|
390 |
+
$this->markTestSkipped('The FTP_BINARY constant is not defined');
|
391 |
+
}
|
392 |
+
|
393 |
+
$adapter = new Ftp($this->options);
|
394 |
+
$this->assertOptionsAreRetrievable($adapter);
|
395 |
+
$listing = $adapter->listContents('', true);
|
396 |
+
$this->assertInternalType('array', $listing);
|
397 |
+
$this->assertGetterFailuresReturnFalse($adapter);
|
398 |
+
$this->assertTrue($adapter->rename('a', 'b'));
|
399 |
+
$this->assertTrue($adapter->delete('a'));
|
400 |
+
$this->assertFalse($adapter->deleteDir('some.nested/rmdir.fail'));
|
401 |
+
$this->assertFalse($adapter->deleteDir('rmdir.nested.fail'));
|
402 |
+
$this->assertTrue($adapter->deleteDir('somewhere'));
|
403 |
+
$result = $adapter->read('something.txt');
|
404 |
+
$this->assertEquals('contents', $result['contents']);
|
405 |
+
$result = $adapter->getMimetype('something.txt');
|
406 |
+
$this->assertEquals('text/plain', $result['mimetype']);
|
407 |
+
$this->assertFalse($adapter->createDir('some.nested/mkdir.fail', new Config()));
|
408 |
+
$this->assertInternalType('array', $adapter->write('unknowndir/file.txt', 'contents', new Config(['visibility' => 'public'])));
|
409 |
+
$this->assertInternalType('array', $adapter->writeStream('unknowndir/file.txt', tmpfile(), new Config(['visibility' => 'public'])));
|
410 |
+
$this->assertInternalType('array', $adapter->updateStream('unknowndir/file.txt', tmpfile(), new Config()));
|
411 |
+
$this->assertInternalType('array', $adapter->getTimestamp('some/file.ext'));
|
412 |
+
}
|
413 |
+
|
414 |
+
/**
|
415 |
+
* @depends testInstantiable
|
416 |
+
*/
|
417 |
+
public function testManualRecursion()
|
418 |
+
{
|
419 |
+
$adapter = new Ftp($this->options);
|
420 |
+
$adapter->setRecurseManually(true);
|
421 |
+
$result = $adapter->listContents('recurse.manually', true);
|
422 |
+
$this->assertCount(2, $result);
|
423 |
+
$this->assertEquals('recurse.manually/recurse.folder', $result[0]['path']);
|
424 |
+
$this->assertEquals('recurse.manually/recurse.folder/file1.txt', $result[1]['path']);
|
425 |
+
}
|
426 |
+
|
427 |
+
/**
|
428 |
+
* @depends testInstantiable
|
429 |
+
*/
|
430 |
+
public function testDisconnect()
|
431 |
+
{
|
432 |
+
$adapter = new Ftp(array_merge($this->options, ['host' => 'disconnect.check']));
|
433 |
+
$adapter->connect();
|
434 |
+
$this->assertTrue($adapter->isConnected());
|
435 |
+
$adapter->disconnect();
|
436 |
+
$this->assertFalse($adapter->isConnected());
|
437 |
+
}
|
438 |
+
|
439 |
+
/**
|
440 |
+
* @depends testInstantiable
|
441 |
+
*/
|
442 |
+
public function testIsConnectedTimeoutPassthu()
|
443 |
+
{
|
444 |
+
putenv('FTP_CLOSE_THROW=DISCONNECT_RETHROW');
|
445 |
+
|
446 |
+
$this->expectException('ErrorException');
|
447 |
+
$adapter = new Ftp(array_merge($this->options, ['host' => 'disconnect.check']));
|
448 |
+
$adapter->connect();
|
449 |
+
$adapter->isConnected();
|
450 |
+
}
|
451 |
+
|
452 |
+
/**
|
453 |
+
* @depends testInstantiable
|
454 |
+
*/
|
455 |
+
public function testIsConnectedTimeout()
|
456 |
+
{
|
457 |
+
putenv('FTP_CLOSE_THROW=DISCONNECT_CATCH');
|
458 |
+
|
459 |
+
$adapter = new Ftp(array_merge($this->options, ['host' => 'disconnect.check']));
|
460 |
+
$adapter->connect();
|
461 |
+
$this->assertFalse($adapter->isConnected());
|
462 |
+
}
|
463 |
+
|
464 |
+
/**
|
465 |
+
* @depends testInstantiable
|
466 |
+
*/
|
467 |
+
public function testIgnorePassiveAddress()
|
468 |
+
{
|
469 |
+
if ( ! defined('FTP_USEPASVADDRESS')) {
|
470 |
+
define('FTP_USEPASVADDRESS', 2);
|
471 |
+
}
|
472 |
+
|
473 |
+
$this->assertFalse(getenv('USE_PASSV_ADDREESS' . FTP_USEPASVADDRESS));
|
474 |
+
$adapter = new Ftp(array_merge($this->options, ['ignorePassiveAddress' => true]));
|
475 |
+
$adapter->connect();
|
476 |
+
$this->assertEquals('NO', getenv('USE_PASSV_ADDREESS' . FTP_USEPASVADDRESS));
|
477 |
+
}
|
478 |
+
|
479 |
+
/**
|
480 |
+
* @depends testInstantiable
|
481 |
+
*/
|
482 |
+
public function testGetMetadataForRoot()
|
483 |
+
{
|
484 |
+
$adapter = new Ftp($this->options);
|
485 |
+
$metadata = $adapter->getMetadata('');
|
486 |
+
$expected = ['type' => 'dir', 'path' => ''];
|
487 |
+
$this->assertEquals($expected, $metadata);
|
488 |
+
}
|
489 |
+
|
490 |
+
/**
|
491 |
+
* @depends testInstantiable
|
492 |
+
*/
|
493 |
+
public function testGetMetadata()
|
494 |
+
{
|
495 |
+
$adapter = new Ftp($this->options);
|
496 |
+
$metadata = $adapter->getMetadata('file1.txt');
|
497 |
+
$this->assertInternalType('array', $metadata);
|
498 |
+
$this->assertEquals('file', $metadata['type']);
|
499 |
+
$this->assertEquals('file1.txt', $metadata['path']);
|
500 |
+
}
|
501 |
+
|
502 |
+
/**
|
503 |
+
* @depends testInstantiable
|
504 |
+
*/
|
505 |
+
public function testHasWithTotalZero()
|
506 |
+
{
|
507 |
+
$adapter = new Ftp($this->options);
|
508 |
+
$this->assertFalse($adapter->getMetadata('rawlist-total-0.txt'));
|
509 |
+
}
|
510 |
+
|
511 |
+
/**
|
512 |
+
* @depends testInstantiable
|
513 |
+
*/
|
514 |
+
public function testGetMetadataForRootFileNamedZero()
|
515 |
+
{
|
516 |
+
$adapter = new Ftp($this->options);
|
517 |
+
$metadata = $adapter->getMetadata('0');
|
518 |
+
$this->assertInternalType('array', $metadata);
|
519 |
+
$this->assertEquals('file', $metadata['type']);
|
520 |
+
$this->assertEquals('0', $metadata['path']);
|
521 |
+
}
|
522 |
+
|
523 |
+
/**
|
524 |
+
* @depends testInstantiable
|
525 |
+
*/
|
526 |
+
public function testGetMetadataIgnoresInvalidTotalLine()
|
527 |
+
{
|
528 |
+
$adapter = new Ftp($this->options);
|
529 |
+
$metadata = $adapter->getMetadata('file1.with-total-line.txt');
|
530 |
+
$this->assertEquals('file1.txt', $metadata['path']);
|
531 |
+
}
|
532 |
+
|
533 |
+
/**
|
534 |
+
* @depends testInstantiable
|
535 |
+
*/
|
536 |
+
public function testGetWindowsMetadata()
|
537 |
+
{
|
538 |
+
$adapter = new Ftp($this->options);
|
539 |
+
$metadata = $adapter->getMetadata('file2.txt');
|
540 |
+
$this->assertInternalType('array', $metadata);
|
541 |
+
$this->assertEquals('file', $metadata['type']);
|
542 |
+
$this->assertEquals('file2.txt', $metadata['path']);
|
543 |
+
$this->assertEquals(1432382940, $metadata['timestamp']);
|
544 |
+
$this->assertEquals('public', $metadata['visibility']);
|
545 |
+
$this->assertEquals(684, $metadata['size']);
|
546 |
+
|
547 |
+
$metadata = $adapter->getMetadata('file3.txt');
|
548 |
+
$this->assertInternalType('array', $metadata);
|
549 |
+
$this->assertEquals('file', $metadata['type']);
|
550 |
+
$this->assertEquals('file3.txt', $metadata['path']);
|
551 |
+
$this->assertEquals(1473163740, $metadata['timestamp']);
|
552 |
+
$this->assertEquals('public', $metadata['visibility']);
|
553 |
+
$this->assertEquals(684, $metadata['size']);
|
554 |
+
|
555 |
+
$metadata = $adapter->getMetadata('file4.txt');
|
556 |
+
$this->assertInternalType('array', $metadata);
|
557 |
+
$this->assertEquals('file', $metadata['type']);
|
558 |
+
$this->assertEquals('file4.txt', $metadata['path']);
|
559 |
+
$this->assertEquals(1464005340, $metadata['timestamp']);
|
560 |
+
$this->assertEquals('public', $metadata['visibility']);
|
561 |
+
$this->assertEquals(684, $metadata['size']);
|
562 |
+
|
563 |
+
$metadata = $adapter->getMetadata('dir1');
|
564 |
+
$this->assertEquals('dir', $metadata['type']);
|
565 |
+
$this->assertEquals('dir1', $metadata['path']);
|
566 |
+
$this->assertEquals(1432382940, $metadata['timestamp']);
|
567 |
+
}
|
568 |
+
|
569 |
+
/**
|
570 |
+
* @depends testInstantiable
|
571 |
+
*
|
572 |
+
* Some Windows FTP server return a 500 error with the message "File not found" instead of false
|
573 |
+
* when calling ftp_rawlist() on invalid dir
|
574 |
+
*/
|
575 |
+
public function testFileNotFoundWindowMetadata()
|
576 |
+
{
|
577 |
+
$adapter = new Ftp($this->options);
|
578 |
+
$metadata = $adapter->getMetadata('windows.not.found');
|
579 |
+
$this->assertFalse($metadata);
|
580 |
+
}
|
581 |
+
|
582 |
+
/**
|
583 |
+
* @depends testInstantiable
|
584 |
+
*/
|
585 |
+
public function testFileNotFoundWindows()
|
586 |
+
{
|
587 |
+
$adapter = new Ftp($this->options);
|
588 |
+
$this->assertFalse($adapter->has('windows.not.found'));
|
589 |
+
$this->assertFalse($adapter->getVisibility('windows.not.found'));
|
590 |
+
$this->assertFalse($adapter->getSize('windows.not.found'));
|
591 |
+
$this->assertFalse($adapter->getMimetype('windows.not.found'));
|
592 |
+
$this->assertFalse($adapter->getTimestamp('windows.not.found'));
|
593 |
+
$this->assertFalse($adapter->write('write.fail', 'contents', new Config()));
|
594 |
+
$this->assertFalse($adapter->writeStream('write.fail', tmpfile(), new Config()));
|
595 |
+
$this->assertFalse($adapter->update('write.fail', 'contents', new Config()));
|
596 |
+
$this->assertFalse($adapter->setVisibility('chmod.fail', 'private'));
|
597 |
+
}
|
598 |
+
|
599 |
+
|
600 |
+
/**
|
601 |
+
* @depends testInstantiable
|
602 |
+
*/
|
603 |
+
public function testGetLastFile()
|
604 |
+
{
|
605 |
+
$adapter = new Ftp($this->options);
|
606 |
+
|
607 |
+
$listing = $adapter->listContents('lastfiledir');
|
608 |
+
|
609 |
+
$last_modified_file = reset($listing);
|
610 |
+
foreach ($listing as $file) {
|
611 |
+
$file_time = $adapter->getTimestamp($file['path'])['timestamp'];
|
612 |
+
$last_file_time = $adapter->getTimestamp($last_modified_file['path'])['timestamp'];
|
613 |
+
|
614 |
+
if ($last_file_time < $file_time) {
|
615 |
+
$last_modified_file = $file;
|
616 |
+
}
|
617 |
+
}
|
618 |
+
|
619 |
+
$this->assertEquals('lastfiledir/file3.txt', $last_modified_file['path']);
|
620 |
+
}
|
621 |
+
|
622 |
+
/**
|
623 |
+
* @depends testInstantiable
|
624 |
+
*/
|
625 |
+
public function testListDirWithFileWithLeadingSpace()
|
626 |
+
{
|
627 |
+
$adapter = new Ftp($this->options);
|
628 |
+
$listing = $adapter->listContents('spaced.files');
|
629 |
+
$file = array_pop($listing);
|
630 |
+
|
631 |
+
$this->assertEquals('spaced.files/ file1.txt', $file['path']);
|
632 |
+
}
|
633 |
+
|
634 |
+
/**
|
635 |
+
* @depends testInstantiable
|
636 |
+
*/
|
637 |
+
public function testListingDoNotIncludeTimestamp()
|
638 |
+
{
|
639 |
+
$adapter = new Ftp($this->options);
|
640 |
+
|
641 |
+
$listing = $adapter->listContents('');
|
642 |
+
|
643 |
+
$this->assertNotEmpty($listing);
|
644 |
+
$this->assertArrayNotHasKey('timestamp', $listing);
|
645 |
+
}
|
646 |
+
|
647 |
+
/**
|
648 |
+
* @depends testInstantiable
|
649 |
+
* @expectedException RuntimeException
|
650 |
+
*/
|
651 |
+
public function testConnectFail()
|
652 |
+
{
|
653 |
+
$adapter = new Ftp(['host' => 'fail.me', 'ssl' => false, 'transferMode' => FTP_BINARY]);
|
654 |
+
$adapter->connect();
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
* @depends testInstantiable
|
659 |
+
*/
|
660 |
+
public function testRawlistFail()
|
661 |
+
{
|
662 |
+
$adapter = new Ftp($this->options);
|
663 |
+
$result = $adapter->listContents('fail.rawlist');
|
664 |
+
$this->assertEquals([], $result);
|
665 |
+
}
|
666 |
+
|
667 |
+
/**
|
668 |
+
* @depends testInstantiable
|
669 |
+
* @expectedException RuntimeException
|
670 |
+
*/
|
671 |
+
public function testConnectFailSsl()
|
672 |
+
{
|
673 |
+
$adapter = new Ftp(['host' => 'fail.me', 'ssl' => true]);
|
674 |
+
$adapter->connect();
|
675 |
+
}
|
676 |
+
|
677 |
+
/**
|
678 |
+
* @depends testInstantiable
|
679 |
+
* @expectedException RuntimeException
|
680 |
+
*/
|
681 |
+
public function testLoginFailSsl()
|
682 |
+
{
|
683 |
+
$adapter = new Ftp(['host' => 'login.fail', 'ssl' => true]);
|
684 |
+
$adapter->connect();
|
685 |
+
}
|
686 |
+
|
687 |
+
/**
|
688 |
+
* @depends testInstantiable
|
689 |
+
* @expectedException RuntimeException
|
690 |
+
*/
|
691 |
+
public function testRootFailSsl()
|
692 |
+
{
|
693 |
+
$adapter = new Ftp(['host' => 'chdir.fail', 'ssl' => true, 'root' => 'somewhere']);
|
694 |
+
$adapter->connect();
|
695 |
+
}
|
696 |
+
|
697 |
+
/**
|
698 |
+
* @depends testInstantiable
|
699 |
+
* @expectedException RuntimeException
|
700 |
+
*/
|
701 |
+
public function testPassiveFailSsl()
|
702 |
+
{
|
703 |
+
$adapter = new Ftp(['host' => 'pasv.fail', 'ssl' => true, 'root' => 'somewhere']);
|
704 |
+
$adapter->connect();
|
705 |
+
}
|
706 |
+
|
707 |
+
/**
|
708 |
+
* @depends testInstantiable
|
709 |
+
*/
|
710 |
+
public function testItReconnects()
|
711 |
+
{
|
712 |
+
$adapter = new Ftp(['host' => 'reconnect.me', 'ssl' => true, 'root' => 'somewhere']);
|
713 |
+
$this->assertFalse($adapter->isConnected());
|
714 |
+
$this->assertNotNull($adapter->getConnection());
|
715 |
+
}
|
716 |
+
|
717 |
+
/**
|
718 |
+
* @depends testInstantiable
|
719 |
+
*/
|
720 |
+
public function testItCanSetSystemType()
|
721 |
+
{
|
722 |
+
$adapter = new Ftp($this->options);
|
723 |
+
$this->assertNull($adapter->getSystemType());
|
724 |
+
$adapter->setSystemType('unix');
|
725 |
+
$this->assertEquals('unix', $adapter->getSystemType());
|
726 |
+
}
|
727 |
+
|
728 |
+
/**
|
729 |
+
* @depends testInstantiable
|
730 |
+
* @expectedException \League\Flysystem\NotSupportedException
|
731 |
+
*/
|
732 |
+
public function testItThrowsAnExceptionWhenAnInvalidSystemTypeIsSet()
|
733 |
+
{
|
734 |
+
$adapter = new Ftp($this->options + ['systemType' => 'unknown']);
|
735 |
+
$adapter->listContents();
|
736 |
+
}
|
737 |
+
|
738 |
+
/**
|
739 |
+
* @depends testInstantiable
|
740 |
+
* @expectedException \RuntimeException
|
741 |
+
*/
|
742 |
+
public function testItThrowsAnExceptionWhenAnInvalidUnixListingIsFound()
|
743 |
+
{
|
744 |
+
$adapter = new Ftp($this->options + ['systemType' => 'unix']);
|
745 |
+
$metadata = $adapter->getMetadata('file1.with-invalid-line.txt');
|
746 |
+
$this->assertEquals('file1.txt', $metadata['path']);
|
747 |
+
}
|
748 |
+
|
749 |
+
/**
|
750 |
+
* @depends testInstantiable
|
751 |
+
*/
|
752 |
+
public function testReadFailure()
|
753 |
+
{
|
754 |
+
$adapter = new Ftp($this->options + ['systemType' => 'unix']);
|
755 |
+
$this->assertFalse($adapter->read('not.found'));
|
756 |
+
}
|
757 |
+
|
758 |
+
/**
|
759 |
+
* @depends testInstantiable
|
760 |
+
* @expectedException \RuntimeException
|
761 |
+
*/
|
762 |
+
public function testItThrowsAnExceptionWhenAnInvalidWindowsListingIsFound()
|
763 |
+
{
|
764 |
+
$adapter = new Ftp($this->options + ['systemType' => 'windows']);
|
765 |
+
$metadata = $adapter->getMetadata('file1.with-invalid-line.txt');
|
766 |
+
$this->assertEquals('file1.txt', $metadata['path']);
|
767 |
+
}
|
768 |
+
|
769 |
+
/**
|
770 |
+
* @depends testInstantiable
|
771 |
+
*/
|
772 |
+
public function testItSetUtf8Mode()
|
773 |
+
{
|
774 |
+
$adapter = new Ftp($this->options + ['utf8' => true]);
|
775 |
+
$adapter->setUtf8(true);
|
776 |
+
$this->assertNull($adapter->connect());
|
777 |
+
}
|
778 |
+
|
779 |
+
/**
|
780 |
+
* @depends testInstantiable
|
781 |
+
* @expectedException \RuntimeException
|
782 |
+
*/
|
783 |
+
public function testItThrowsAnExceptionWhenItCouldNotSetUtf8ModeForConnection()
|
784 |
+
{
|
785 |
+
$adapter = new Ftp(['host' => 'utf8.fail', 'utf8' => true]);
|
786 |
+
$adapter->setUtf8(true);
|
787 |
+
$adapter->connect();
|
788 |
+
}
|
789 |
+
|
790 |
+
/**
|
791 |
+
* @param $adapter
|
792 |
+
*/
|
793 |
+
protected function assertOptionsAreRetrievable($adapter)
|
794 |
+
{
|
795 |
+
$this->assertEquals('example.org', $adapter->getHost());
|
796 |
+
$this->assertEquals(40, $adapter->getPort());
|
797 |
+
$this->assertEquals(35, $adapter->getTimeout());
|
798 |
+
$this->assertEquals('/somewhere/', $adapter->getRoot());
|
799 |
+
$this->assertEquals(0777, $adapter->getPermPublic());
|
800 |
+
$this->assertEquals(0000, $adapter->getPermPrivate());
|
801 |
+
$this->assertEquals('user', $adapter->getUsername());
|
802 |
+
$this->assertEquals('password', $adapter->getPassword());
|
803 |
+
}
|
804 |
+
|
805 |
+
/**
|
806 |
+
* @param $adapter
|
807 |
+
*/
|
808 |
+
protected function assertGetterFailuresReturnFalse($adapter)
|
809 |
+
{
|
810 |
+
$this->assertFalse($adapter->has('not.found'));
|
811 |
+
$this->assertFalse($adapter->getVisibility('not.found'));
|
812 |
+
$this->assertFalse($adapter->getSize('not.found'));
|
813 |
+
$this->assertFalse($adapter->getMimetype('not.found'));
|
814 |
+
$this->assertFalse($adapter->getTimestamp('not.found'));
|
815 |
+
$this->assertFalse($adapter->write('write.fail', 'contents', new Config()));
|
816 |
+
$this->assertFalse($adapter->writeStream('write.fail', tmpfile(), new Config()));
|
817 |
+
$this->assertFalse($adapter->update('write.fail', 'contents', new Config()));
|
818 |
+
$this->assertFalse($adapter->setVisibility('chmod.fail', 'private'));
|
819 |
+
}
|
820 |
+
}
|
vendor/league/flysystem/tests/FtpdTests.php
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Config;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class FtpdTests extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
protected $options = [
|
13 |
+
'host' => 'example.org',
|
14 |
+
'port' => 40,
|
15 |
+
'ssl' => true,
|
16 |
+
'timeout' => 35,
|
17 |
+
'root' => '/somewhere',
|
18 |
+
'permPublic' => 0777,
|
19 |
+
'permPrivate' => 0000,
|
20 |
+
'passive' => false,
|
21 |
+
'username' => 'user',
|
22 |
+
'password' => 'password',
|
23 |
+
];
|
24 |
+
|
25 |
+
public function testInstantiable()
|
26 |
+
{
|
27 |
+
if ( ! defined('FTP_BINARY')) {
|
28 |
+
$this->markTestSkipped('The FTP_BINARY constant is not defined');
|
29 |
+
}
|
30 |
+
|
31 |
+
$adapter = new Ftpd($this->options);
|
32 |
+
$listing = $adapter->listContents('', true);
|
33 |
+
$this->assertInternalType('array', $listing);
|
34 |
+
$this->assertFalse($adapter->has('syno.not.found'));
|
35 |
+
$result = $adapter->getMimetype('something.txt');
|
36 |
+
$this->assertEquals('text/plain', $result['mimetype']);
|
37 |
+
$this->assertInternalType('array', $adapter->write('syno.unknowndir/file.txt', 'contents', new Config(['visibility' => 'public'])));
|
38 |
+
$this->assertInternalType('array', $adapter->getTimestamp('some/file.ext'));
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @depends testInstantiable
|
43 |
+
*/
|
44 |
+
public function testRawlistFail()
|
45 |
+
{
|
46 |
+
$adapter = new Ftpd($this->options);
|
47 |
+
$result = $adapter->listContents('fail.rawlist');
|
48 |
+
$this->assertEquals([], $result);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @depends testInstantiable
|
53 |
+
*/
|
54 |
+
public function testGetMetadata()
|
55 |
+
{
|
56 |
+
$adapter = new Ftpd($this->options);
|
57 |
+
$result = $adapter->getMetadata('something.txt');
|
58 |
+
$this->assertNotEmpty($result);
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @depends testInstantiable
|
63 |
+
*/
|
64 |
+
public function testGetMetadataOnRoot()
|
65 |
+
{
|
66 |
+
$adapter = new Ftpd($this->options);
|
67 |
+
$result = $adapter->getMetadata('');
|
68 |
+
$this->assertNotEmpty($result);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @depends testInstantiable
|
73 |
+
*/
|
74 |
+
public function testSynologyFtpLegacyClassName()
|
75 |
+
{
|
76 |
+
$adapter = new SynologyFtp($this->options);
|
77 |
+
$this->assertInstanceOf('League\Flysystem\Adapter\Ftpd', $adapter);
|
78 |
+
}
|
79 |
+
}
|
vendor/league/flysystem/tests/GetWithMetadataTests.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Plugin\GetWithMetadata;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class GetWithMetadataTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @var \Prophecy\Prophecy\ObjectProphecy
|
12 |
+
*/
|
13 |
+
private $prophecy;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var FilesystemInterface
|
17 |
+
*/
|
18 |
+
private $filesystem;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @before
|
22 |
+
*/
|
23 |
+
public function setupFilesystem()
|
24 |
+
{
|
25 |
+
$this->prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
26 |
+
$this->filesystem = $this->prophecy->reveal();
|
27 |
+
}
|
28 |
+
|
29 |
+
public function testGetMethod()
|
30 |
+
{
|
31 |
+
$plugin = new GetWithMetadata();
|
32 |
+
$this->assertEquals('getWithMetadata', $plugin->getMethod());
|
33 |
+
}
|
34 |
+
|
35 |
+
public function testHandle()
|
36 |
+
{
|
37 |
+
$this->prophecy->getMetadata('path.txt')->willReturn([
|
38 |
+
'path' => 'path.txt',
|
39 |
+
'type' => 'file',
|
40 |
+
]);
|
41 |
+
$this->prophecy->getMimetype('path.txt')->willReturn('text/plain');
|
42 |
+
|
43 |
+
$plugin = new GetWithMetadata();
|
44 |
+
$plugin->setFilesystem($this->filesystem);
|
45 |
+
$output = $plugin->handle('path.txt', ['mimetype']);
|
46 |
+
$this->assertEquals([
|
47 |
+
'path' => 'path.txt',
|
48 |
+
'type' => 'file',
|
49 |
+
'mimetype' => 'text/plain',
|
50 |
+
], $output);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function testHandleFail()
|
54 |
+
{
|
55 |
+
$this->prophecy->getMetadata('path.txt')->willReturn(false);
|
56 |
+
$plugin = new GetWithMetadata();
|
57 |
+
$plugin->setFilesystem($this->filesystem);
|
58 |
+
$output = $plugin->handle('path.txt', ['mimetype']);
|
59 |
+
$this->assertFalse($output);
|
60 |
+
}
|
61 |
+
|
62 |
+
public function testHandleInvalid()
|
63 |
+
{
|
64 |
+
$this->expectException('InvalidArgumentException');
|
65 |
+
$this->prophecy->getMetadata('path.txt')->willReturn([
|
66 |
+
'path' => 'path.txt',
|
67 |
+
'type' => 'file',
|
68 |
+
]);
|
69 |
+
|
70 |
+
$plugin = new GetWithMetadata();
|
71 |
+
$plugin->setFilesystem($this->filesystem);
|
72 |
+
$output = $plugin->handle('path.txt', ['invalid']);
|
73 |
+
}
|
74 |
+
}
|
vendor/league/flysystem/tests/HandlerTests.php
ADDED
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Directory;
|
4 |
+
use League\Flysystem\File;
|
5 |
+
use PHPUnit\Framework\TestCase;
|
6 |
+
|
7 |
+
class HandlerTests extends TestCase
|
8 |
+
{
|
9 |
+
use \PHPUnitHacks;
|
10 |
+
|
11 |
+
public function testFileRead()
|
12 |
+
{
|
13 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
14 |
+
$prophecy->read('path.txt')->willReturn('contents');
|
15 |
+
$filesystem = $prophecy->reveal();
|
16 |
+
$file = new File(null, 'path.txt');
|
17 |
+
$file->setFilesystem($filesystem);
|
18 |
+
$output = $file->read();
|
19 |
+
$this->assertEquals('contents', $output);
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testFileDelete()
|
23 |
+
{
|
24 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
25 |
+
$prophecy->delete('path.txt')->willReturn(true);
|
26 |
+
$filesystem = $prophecy->reveal();
|
27 |
+
$file = new File(null, 'path.txt');
|
28 |
+
$file->setFilesystem($filesystem);
|
29 |
+
$output = $file->delete();
|
30 |
+
$this->assertTrue($output);
|
31 |
+
}
|
32 |
+
|
33 |
+
public function testFileReadStream()
|
34 |
+
{
|
35 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
36 |
+
$prophecy->readStream('path.txt')->willReturn('contents');
|
37 |
+
$filesystem = $prophecy->reveal();
|
38 |
+
$file = new File(null, 'path.txt');
|
39 |
+
$file->setFilesystem($filesystem);
|
40 |
+
$output = $file->readStream();
|
41 |
+
$this->assertEquals('contents', $output);
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testFileUpdate()
|
45 |
+
{
|
46 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
47 |
+
$prophecy->update('path.txt', 'contents')->willReturn(true);
|
48 |
+
$filesystem = $prophecy->reveal();
|
49 |
+
$file = new File(null, 'path.txt');
|
50 |
+
$file->setFilesystem($filesystem);
|
51 |
+
$output = $file->update('contents');
|
52 |
+
$this->assertTrue($output);
|
53 |
+
}
|
54 |
+
|
55 |
+
public function testFileUpdateStream()
|
56 |
+
{
|
57 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
58 |
+
$prophecy->updateStream('path.txt', 'contents')->willReturn(true);
|
59 |
+
$filesystem = $prophecy->reveal();
|
60 |
+
$file = new File(null, 'path.txt');
|
61 |
+
$file->setFilesystem($filesystem);
|
62 |
+
$output = $file->updateStream('contents');
|
63 |
+
$this->assertTrue($output);
|
64 |
+
}
|
65 |
+
|
66 |
+
public function getterProvider()
|
67 |
+
{
|
68 |
+
return [
|
69 |
+
['getTimestamp', 123],
|
70 |
+
['getMimetype', 'text/plain'],
|
71 |
+
['getVisibility', 'private'],
|
72 |
+
['getMetadata', ['some' => 'metadata']],
|
73 |
+
['getSize', 123],
|
74 |
+
];
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @dataProvider getterProvider
|
79 |
+
*
|
80 |
+
* @param $method
|
81 |
+
* @param $response
|
82 |
+
*/
|
83 |
+
public function testGetters($method, $response)
|
84 |
+
{
|
85 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
86 |
+
$prophecy->{$method}('path.txt')->willReturn($response);
|
87 |
+
$filesystem = $prophecy->reveal();
|
88 |
+
$file = new File(null, 'path.txt');
|
89 |
+
$file->setFilesystem($filesystem);
|
90 |
+
$output = $file->{$method}();
|
91 |
+
$this->assertEquals($response, $output);
|
92 |
+
}
|
93 |
+
|
94 |
+
public function testFileIsFile()
|
95 |
+
{
|
96 |
+
$response = ['type' => 'file'];
|
97 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
98 |
+
$prophecy->getMetadata('path.txt')->willReturn($response);
|
99 |
+
$filesystem = $prophecy->reveal();
|
100 |
+
$file = new File(null, 'path.txt');
|
101 |
+
$file->setFilesystem($filesystem);
|
102 |
+
$this->assertTrue($file->isFile());
|
103 |
+
}
|
104 |
+
|
105 |
+
public function testFileIsDir()
|
106 |
+
{
|
107 |
+
$response = ['type' => 'file'];
|
108 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
109 |
+
$prophecy->getMetadata('path.txt')->willReturn($response);
|
110 |
+
$filesystem = $prophecy->reveal();
|
111 |
+
$file = new File();
|
112 |
+
$file->setPath('path.txt');
|
113 |
+
$file->setFilesystem($filesystem);
|
114 |
+
$this->assertFalse($file->isDir());
|
115 |
+
}
|
116 |
+
|
117 |
+
public function testFileGetPath()
|
118 |
+
{
|
119 |
+
$file = new File();
|
120 |
+
$file->setPath('path.txt');
|
121 |
+
$this->assertEquals('path.txt', $file->getPath());
|
122 |
+
}
|
123 |
+
|
124 |
+
public function testDirDelete()
|
125 |
+
{
|
126 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
127 |
+
$prophecy->deleteDir('path')->willReturn(true);
|
128 |
+
$filesystem = $prophecy->reveal();
|
129 |
+
$dir = new Directory(null, 'path');
|
130 |
+
$dir->setFilesystem($filesystem);
|
131 |
+
$output = $dir->delete();
|
132 |
+
$this->assertTrue($output);
|
133 |
+
}
|
134 |
+
|
135 |
+
public function testDirListContents()
|
136 |
+
{
|
137 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
138 |
+
$prophecy->listContents('path', true)->willReturn($listing = ['listing']);
|
139 |
+
$filesystem = $prophecy->reveal();
|
140 |
+
$dir = new Directory(null, 'path');
|
141 |
+
$dir->setFilesystem($filesystem);
|
142 |
+
$output = $dir->getContents(true);
|
143 |
+
$this->assertEquals($listing, $output);
|
144 |
+
}
|
145 |
+
|
146 |
+
public function testGetFilesystem()
|
147 |
+
{
|
148 |
+
$prophecy = $this->prophesize('League\Flysystem\FilesystemInterface');
|
149 |
+
$filesystem = $prophecy->reveal();
|
150 |
+
$dir = new Directory(null, 'path');
|
151 |
+
$dir->setFilesystem($filesystem);
|
152 |
+
$this->assertEquals($filesystem, $dir->getFilesystem());
|
153 |
+
}
|
154 |
+
}
|
vendor/league/flysystem/tests/ListFilesTests.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Plugin\ListFiles;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class ListFilesTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
private $filesystem;
|
11 |
+
private $actualFilesystem;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @before
|
15 |
+
*/
|
16 |
+
public function setupFilesystem()
|
17 |
+
{
|
18 |
+
$this->filesystem = $this->prophesize('League\Flysystem\FilesystemInterface');
|
19 |
+
$this->actualFilesystem = $this->filesystem->reveal();
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testHandle()
|
23 |
+
{
|
24 |
+
$plugin = new ListFiles();
|
25 |
+
$this->assertEquals('listFiles', $plugin->getMethod());
|
26 |
+
$this->filesystem->listContents('dirname', true)->willReturn([
|
27 |
+
['path' => 'dirname', 'type' => 'dir'],
|
28 |
+
['path' => 'dirname/path.txt', 'type' => 'file'],
|
29 |
+
]);
|
30 |
+
$plugin->setFilesystem($this->actualFilesystem);
|
31 |
+
$output = $plugin->handle('dirname', true);
|
32 |
+
$this->assertEquals([['path' => 'dirname/path.txt', 'type' => 'file']], $output);
|
33 |
+
}
|
34 |
+
}
|
vendor/league/flysystem/tests/ListPathsTests.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Plugin\ListPaths;
|
4 |
+
use PHPUnit\Framework\TestCase;
|
5 |
+
|
6 |
+
class ListPathsTests extends TestCase
|
7 |
+
{
|
8 |
+
use \PHPUnitHacks;
|
9 |
+
|
10 |
+
private $filesystem;
|
11 |
+
private $actualFilesystem;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @before
|
15 |
+
*/
|
16 |
+
public function setupFilesystem()
|
17 |
+
{
|
18 |
+
$this->filesystem = $this->prophesize('League\Flysystem\FilesystemInterface');
|
19 |
+
$this->actualFilesystem = $this->filesystem->reveal();
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testHandle()
|
23 |
+
{
|
24 |
+
$plugin = new ListPaths();
|
25 |
+
$this->assertEquals('listPaths', $plugin->getMethod());
|
26 |
+
$this->filesystem->listContents('dirname', true)->willReturn([
|
27 |
+
['path' => 'dirname/path.txt'],
|
28 |
+
]);
|
29 |
+
$plugin->setFilesystem($this->actualFilesystem);
|
30 |
+
$output = $plugin->handle('dirname', true);
|
31 |
+
$this->assertEquals(['dirname/path.txt'], $output);
|
32 |
+
}
|
33 |
+
}
|
vendor/league/flysystem/tests/ListWithTests.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Plugin\ListWith;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class ListWithTests extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
public function testHandle()
|
13 |
+
{
|
14 |
+
$prophecy = $this->prophesize('League\Flysystem\Filesystem');
|
15 |
+
$prophecy->listContents('', true)->willReturn([
|
16 |
+
['path' => 'path.txt', 'type' => 'file'],
|
17 |
+
]);
|
18 |
+
$prophecy->getMimetype('path.txt')->willReturn('text/plain');
|
19 |
+
$filesystem = $prophecy->reveal();
|
20 |
+
|
21 |
+
$plugin = new ListWith();
|
22 |
+
$plugin->setFilesystem($filesystem);
|
23 |
+
$this->assertEquals('listWith', $plugin->getMethod());
|
24 |
+
$listing = $plugin->handle(['mimetype'], '', true);
|
25 |
+
$this->assertContainsOnly('array', $listing, true);
|
26 |
+
$first = reset($listing);
|
27 |
+
$this->assertArrayHasKey('mimetype', $first);
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testInvalidInput()
|
31 |
+
{
|
32 |
+
$prophecy = $this->prophesize('League\Flysystem\Filesystem');
|
33 |
+
$prophecy->listContents('', true)->willReturn([
|
34 |
+
['path' => 'path.txt', 'type' => 'file'],
|
35 |
+
]);
|
36 |
+
$filesystem = $prophecy->reveal();
|
37 |
+
|
38 |
+
$this->expectException('InvalidArgumentException');
|
39 |
+
$plugin = new ListWith();
|
40 |
+
$plugin->setFilesystem($filesystem);
|
41 |
+
$plugin->handle(['invalid'], '', true);
|
42 |
+
}
|
43 |
+
}
|
vendor/league/flysystem/tests/LocalAdapterTests.php
ADDED
@@ -0,0 +1,481 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Config;
|
6 |
+
use League\Flysystem\FileNotFoundException;
|
7 |
+
use League\Flysystem\Filesystem;
|
8 |
+
use PHPUnit\Framework\TestCase;
|
9 |
+
|
10 |
+
function fopen($result, $mode)
|
11 |
+
{
|
12 |
+
if (substr($result, -5) === 'false') {
|
13 |
+
return false;
|
14 |
+
}
|
15 |
+
|
16 |
+
if (substr($result, -10) === 'fail.close') {
|
17 |
+
return \fopen('data://text/plain,fail.close', $mode);
|
18 |
+
}
|
19 |
+
|
20 |
+
return call_user_func_array('fopen', func_get_args());
|
21 |
+
}
|
22 |
+
|
23 |
+
function fclose($result)
|
24 |
+
{
|
25 |
+
if (is_resource($result) && stream_get_contents($result) === 'fail.close') {
|
26 |
+
\fclose($result);
|
27 |
+
|
28 |
+
return false;
|
29 |
+
}
|
30 |
+
|
31 |
+
return call_user_func_array('fclose', func_get_args());
|
32 |
+
}
|
33 |
+
|
34 |
+
function chmod($filename, $mode)
|
35 |
+
{
|
36 |
+
if (strpos($filename, 'chmod.fail') !== false) {
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
|
40 |
+
return \chmod($filename, $mode);
|
41 |
+
}
|
42 |
+
|
43 |
+
function mkdir($pathname, $mode = 0777, $recursive = false, $context = null)
|
44 |
+
{
|
45 |
+
if (strpos($pathname, 'fail.plz') !== false) {
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
return call_user_func_array('mkdir', func_get_args());
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
class LocalAdapterTests extends TestCase
|
54 |
+
{
|
55 |
+
use \PHPUnitHacks;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @var Local
|
59 |
+
*/
|
60 |
+
protected $adapter;
|
61 |
+
|
62 |
+
protected $root;
|
63 |
+
|
64 |
+
public function setup()
|
65 |
+
{
|
66 |
+
$this->root = __DIR__ . '/files/';
|
67 |
+
$this->adapter = new Local($this->root);
|
68 |
+
}
|
69 |
+
|
70 |
+
public function teardown()
|
71 |
+
{
|
72 |
+
$it = new \RecursiveDirectoryIterator($this->root, \RecursiveDirectoryIterator::SKIP_DOTS);
|
73 |
+
$files = new \RecursiveIteratorIterator(
|
74 |
+
$it,
|
75 |
+
\RecursiveIteratorIterator::CHILD_FIRST
|
76 |
+
);
|
77 |
+
foreach ($files as $file) {
|
78 |
+
if ($file->getFilename() === '.' || $file->getFilename() === '..') {
|
79 |
+
continue;
|
80 |
+
}
|
81 |
+
if ($file->isDir()) {
|
82 |
+
rmdir($file->getRealPath());
|
83 |
+
} else {
|
84 |
+
unlink($file->getPathname());
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
+
public function testStreamWrappersAreSupported()
|
90 |
+
{
|
91 |
+
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
|
92 |
+
$this->markTestSkipped('Windows does not support this.');
|
93 |
+
}
|
94 |
+
|
95 |
+
(new Local(__DIR__.'/files'))->write('file.txt', 'contents', new Config());
|
96 |
+
|
97 |
+
$adapter = new Local('file://'.__DIR__.'/files');
|
98 |
+
$this->assertCount(1, $adapter->listContents());
|
99 |
+
}
|
100 |
+
|
101 |
+
public function testRelativeRootsAreSupportes()
|
102 |
+
{
|
103 |
+
(new Local(__DIR__ . '/files'))->write('file.txt', 'contents', new Config());
|
104 |
+
|
105 |
+
$adapter = new Local(__DIR__ . '/files/../files');
|
106 |
+
$this->assertCount(1, $adapter->listContents());
|
107 |
+
}
|
108 |
+
|
109 |
+
public function testHasWithDir()
|
110 |
+
{
|
111 |
+
$this->adapter->createDir('0', new Config());
|
112 |
+
$this->assertTrue($this->adapter->has('0'));
|
113 |
+
$this->adapter->deleteDir('0');
|
114 |
+
}
|
115 |
+
|
116 |
+
public function testHasWithFile()
|
117 |
+
{
|
118 |
+
$adapter = $this->adapter;
|
119 |
+
$adapter->write('file.txt', 'content', new Config());
|
120 |
+
$this->assertTrue($adapter->has('file.txt'));
|
121 |
+
$adapter->delete('file.txt');
|
122 |
+
}
|
123 |
+
|
124 |
+
public function testReadStream()
|
125 |
+
{
|
126 |
+
$adapter = $this->adapter;
|
127 |
+
$adapter->write('file.txt', 'contents', new Config());
|
128 |
+
$result = $adapter->readStream('file.txt');
|
129 |
+
$this->assertInternalType('array', $result);
|
130 |
+
$this->assertArrayHasKey('stream', $result);
|
131 |
+
$this->assertInternalType('resource', $result['stream']);
|
132 |
+
fclose($result['stream']);
|
133 |
+
$adapter->delete('file.txt');
|
134 |
+
}
|
135 |
+
|
136 |
+
public function testWriteStream()
|
137 |
+
{
|
138 |
+
$adapter = $this->adapter;
|
139 |
+
$temp = tmpfile();
|
140 |
+
fwrite($temp, 'dummy');
|
141 |
+
rewind($temp);
|
142 |
+
$adapter->writeStream('dir/file.txt', $temp, new Config(['visibility' => 'public']));
|
143 |
+
fclose($temp);
|
144 |
+
$this->assertTrue($adapter->has('dir/file.txt'));
|
145 |
+
$result = $adapter->read('dir/file.txt');
|
146 |
+
$this->assertEquals('dummy', $result['contents']);
|
147 |
+
$adapter->deleteDir('dir');
|
148 |
+
}
|
149 |
+
|
150 |
+
public function testListingNonexistingDirectory()
|
151 |
+
{
|
152 |
+
$result = $this->adapter->listContents('nonexisting/directory');
|
153 |
+
$this->assertEquals([], $result);
|
154 |
+
}
|
155 |
+
|
156 |
+
public function testUpdateStream()
|
157 |
+
{
|
158 |
+
$adapter = $this->adapter;
|
159 |
+
$adapter->write('file.txt', 'initial', new Config());
|
160 |
+
$temp = tmpfile();
|
161 |
+
fwrite($temp, 'dummy');
|
162 |
+
$adapter->updateStream('file.txt', $temp, new Config());
|
163 |
+
fclose($temp);
|
164 |
+
$this->assertTrue($adapter->has('file.txt'));
|
165 |
+
$adapter->delete('file.txt');
|
166 |
+
}
|
167 |
+
|
168 |
+
public function testCreateZeroDir()
|
169 |
+
{
|
170 |
+
$this->adapter->createDir('0', new Config());
|
171 |
+
$this->assertTrue(is_dir($this->adapter->applyPathPrefix('0')));
|
172 |
+
$this->adapter->deleteDir('0');
|
173 |
+
}
|
174 |
+
|
175 |
+
public function testCopy()
|
176 |
+
{
|
177 |
+
$adapter = $this->adapter;
|
178 |
+
$adapter->write('file.ext', 'content', new Config(['visibility' => 'public']));
|
179 |
+
$this->assertTrue($adapter->copy('file.ext', 'new.ext'));
|
180 |
+
$this->assertTrue($adapter->has('new.ext'));
|
181 |
+
$adapter->delete('file.ext');
|
182 |
+
$adapter->delete('new.ext');
|
183 |
+
}
|
184 |
+
|
185 |
+
public function testFailingStreamCalls()
|
186 |
+
{
|
187 |
+
$this->assertFalse($this->adapter->writeStream('false', tmpfile(), new Config()));
|
188 |
+
$this->assertFalse($this->adapter->writeStream('fail.close', tmpfile(), new Config()));
|
189 |
+
}
|
190 |
+
|
191 |
+
public function testNullPrefix()
|
192 |
+
{
|
193 |
+
$this->adapter->setPathPrefix('');
|
194 |
+
$path = 'some'.DIRECTORY_SEPARATOR.'path.ext';
|
195 |
+
$this->assertEquals($path, $this->adapter->applyPathPrefix($path));
|
196 |
+
$this->assertEquals($path, $this->adapter->removePathPrefix($path));
|
197 |
+
}
|
198 |
+
|
199 |
+
public function testWindowsPrefix()
|
200 |
+
{
|
201 |
+
$path = 'some' . DIRECTORY_SEPARATOR . 'path.ext';
|
202 |
+
$expected = 'c:' . DIRECTORY_SEPARATOR . $path;
|
203 |
+
|
204 |
+
$this->adapter->setPathPrefix('c:/');
|
205 |
+
$prefixed = $this->adapter->applyPathPrefix($path);
|
206 |
+
$this->assertEquals($expected, $prefixed);
|
207 |
+
$this->assertEquals($path, $this->adapter->removePathPrefix($prefixed));
|
208 |
+
|
209 |
+
$expected = 'c:\\\\some\\dir' . DIRECTORY_SEPARATOR . $path;
|
210 |
+
$this->adapter->setPathPrefix('c:\\\\some\\dir\\');
|
211 |
+
$prefixed = $this->adapter->applyPathPrefix($path);
|
212 |
+
$this->assertEquals($expected, $prefixed);
|
213 |
+
$this->assertEquals($path, $this->adapter->removePathPrefix($prefixed));
|
214 |
+
}
|
215 |
+
|
216 |
+
public function testGetPathPrefix()
|
217 |
+
{
|
218 |
+
$this->assertEquals(realpath($this->root), realpath($this->adapter->getPathPrefix()));
|
219 |
+
}
|
220 |
+
|
221 |
+
public function testRenameToNonExistsingDirectory()
|
222 |
+
{
|
223 |
+
$this->adapter->write('file.txt', 'contents', new Config());
|
224 |
+
$dirname = uniqid();
|
225 |
+
$this->assertFalse(is_dir($this->root . DIRECTORY_SEPARATOR . $dirname));
|
226 |
+
$this->assertTrue($this->adapter->rename('file.txt', $dirname . '/file.txt'));
|
227 |
+
}
|
228 |
+
|
229 |
+
public function testNotWritableRoot()
|
230 |
+
{
|
231 |
+
if (IS_WINDOWS) {
|
232 |
+
$this->markTestSkipped("File permissions not supported on Windows.");
|
233 |
+
}
|
234 |
+
|
235 |
+
try {
|
236 |
+
$root = __DIR__ . '/files/not-writable';
|
237 |
+
mkdir($root, 0000, true);
|
238 |
+
$this->expectException('LogicException');
|
239 |
+
new Local($root);
|
240 |
+
} catch (\Exception $e) {
|
241 |
+
rmdir($root);
|
242 |
+
throw $e;
|
243 |
+
}
|
244 |
+
}
|
245 |
+
|
246 |
+
public function testListContents()
|
247 |
+
{
|
248 |
+
$this->adapter->write('dirname/file.txt', 'contents', new Config());
|
249 |
+
$contents = $this->adapter->listContents('dirname', false);
|
250 |
+
$this->assertCount(1, $contents);
|
251 |
+
$this->assertArrayHasKey('type', $contents[0]);
|
252 |
+
}
|
253 |
+
|
254 |
+
public function testListContentsRecursive()
|
255 |
+
{
|
256 |
+
$this->adapter->write('dirname/file.txt', 'contents', new Config());
|
257 |
+
$this->adapter->write('dirname/other.txt', 'contents', new Config());
|
258 |
+
$contents = $this->adapter->listContents('', true);
|
259 |
+
$this->assertCount(3, $contents);
|
260 |
+
}
|
261 |
+
|
262 |
+
public function testGetSize()
|
263 |
+
{
|
264 |
+
$this->adapter->write('dummy.txt', '1234', new Config());
|
265 |
+
$result = $this->adapter->getSize('dummy.txt');
|
266 |
+
$this->assertInternalType('array', $result);
|
267 |
+
$this->assertArrayHasKey('size', $result);
|
268 |
+
$this->assertEquals(4, $result['size']);
|
269 |
+
}
|
270 |
+
|
271 |
+
public function testGetTimestamp()
|
272 |
+
{
|
273 |
+
$this->adapter->write('dummy.txt', '1234', new Config());
|
274 |
+
$result = $this->adapter->getTimestamp('dummy.txt');
|
275 |
+
$this->assertInternalType('array', $result);
|
276 |
+
$this->assertArrayHasKey('timestamp', $result);
|
277 |
+
$this->assertInternalType('int', $result['timestamp']);
|
278 |
+
}
|
279 |
+
|
280 |
+
public function testGetMimetype()
|
281 |
+
{
|
282 |
+
$this->adapter->write('text.txt', 'contents', new Config());
|
283 |
+
$result = $this->adapter->getMimetype('text.txt');
|
284 |
+
$this->assertInternalType('array', $result);
|
285 |
+
$this->assertArrayHasKey('mimetype', $result);
|
286 |
+
$this->assertEquals('text/plain', $result['mimetype']);
|
287 |
+
}
|
288 |
+
|
289 |
+
public function testCreateDirFail()
|
290 |
+
{
|
291 |
+
$this->assertFalse($this->adapter->createDir('fail.plz', new Config()));
|
292 |
+
}
|
293 |
+
|
294 |
+
public function testCreateDirDefaultVisibility()
|
295 |
+
{
|
296 |
+
$this->adapter->createDir('test-dir', new Config());
|
297 |
+
$output = $this->adapter->getVisibility('test-dir');
|
298 |
+
$this->assertInternalType('array', $output);
|
299 |
+
$this->assertArrayHasKey('visibility', $output);
|
300 |
+
$this->assertEquals('public', $output['visibility']);
|
301 |
+
}
|
302 |
+
|
303 |
+
public function testDeleteDir()
|
304 |
+
{
|
305 |
+
$this->adapter->write('nested/dir/path.txt', 'contents', new Config());
|
306 |
+
$this->assertTrue(is_dir(__DIR__ . '/files/nested/dir'));
|
307 |
+
$this->adapter->deleteDir('nested');
|
308 |
+
$this->assertFalse($this->adapter->has('nested/dir/path.txt'));
|
309 |
+
$this->assertFalse(is_dir(__DIR__ . '/files/nested/dir'));
|
310 |
+
}
|
311 |
+
|
312 |
+
public function testVisibilityPublicFile()
|
313 |
+
{
|
314 |
+
if (IS_WINDOWS) {
|
315 |
+
$this->markTestSkipped("Visibility not supported on Windows.");
|
316 |
+
}
|
317 |
+
|
318 |
+
$this->adapter->write('path.txt', 'contents', new Config());
|
319 |
+
$this->adapter->setVisibility('path.txt', 'public');
|
320 |
+
$output = $this->adapter->getVisibility('path.txt');
|
321 |
+
$this->assertInternalType('array', $output);
|
322 |
+
$this->assertArrayHasKey('visibility', $output);
|
323 |
+
$this->assertEquals('public', $output['visibility']);
|
324 |
+
|
325 |
+
$this->assertEquals("0644", substr(sprintf('%o', fileperms($this->root . 'path.txt')), -4));
|
326 |
+
}
|
327 |
+
|
328 |
+
public function testVisibilityPublicDir()
|
329 |
+
{
|
330 |
+
if (IS_WINDOWS) {
|
331 |
+
$this->markTestSkipped("Visibility not supported on Windows.");
|
332 |
+
}
|
333 |
+
|
334 |
+
$this->adapter->createDir('public-dir', new Config());
|
335 |
+
$this->adapter->setVisibility('public-dir', 'public');
|
336 |
+
$output = $this->adapter->getVisibility('public-dir');
|
337 |
+
$this->assertInternalType('array', $output);
|
338 |
+
$this->assertArrayHasKey('visibility', $output);
|
339 |
+
$this->assertEquals('public', $output['visibility']);
|
340 |
+
}
|
341 |
+
|
342 |
+
public function testVisibilityPrivateFile()
|
343 |
+
{
|
344 |
+
if (IS_WINDOWS) {
|
345 |
+
$this->markTestSkipped("Visibility not supported on Windows.");
|
346 |
+
}
|
347 |
+
|
348 |
+
$this->adapter->write('path.txt', 'contents', new Config());
|
349 |
+
$this->adapter->setVisibility('path.txt', 'private');
|
350 |
+
$output = $this->adapter->getVisibility('path.txt');
|
351 |
+
$this->assertInternalType('array', $output);
|
352 |
+
$this->assertArrayHasKey('visibility', $output);
|
353 |
+
$this->assertEquals('private', $output['visibility']);
|
354 |
+
$this->assertEquals("0600", substr(sprintf('%o', fileperms($this->root . 'path.txt')), -4));
|
355 |
+
}
|
356 |
+
|
357 |
+
public function testVisibilityPrivateDir()
|
358 |
+
{
|
359 |
+
if (IS_WINDOWS) {
|
360 |
+
$this->markTestSkipped("Visibility not supported on Windows.");
|
361 |
+
}
|
362 |
+
|
363 |
+
$this->adapter->createDir('private-dir', new Config());
|
364 |
+
$this->adapter->setVisibility('private-dir', 'private');
|
365 |
+
$output = $this->adapter->getVisibility('private-dir');
|
366 |
+
$this->assertInternalType('array', $output);
|
367 |
+
$this->assertArrayHasKey('visibility', $output);
|
368 |
+
$this->assertEquals('private', $output['visibility']);
|
369 |
+
}
|
370 |
+
|
371 |
+
public function testVisibilityFail()
|
372 |
+
{
|
373 |
+
$this->assertFalse(
|
374 |
+
$this->adapter->setVisibility('chmod.fail', 'public')
|
375 |
+
);
|
376 |
+
}
|
377 |
+
|
378 |
+
public function testApplyPathPrefix()
|
379 |
+
{
|
380 |
+
$this->adapter->setPathPrefix('');
|
381 |
+
$this->assertEquals('', $this->adapter->applyPathPrefix(''));
|
382 |
+
}
|
383 |
+
|
384 |
+
public function testConstructorWithLink()
|
385 |
+
{
|
386 |
+
if (IS_WINDOWS) {
|
387 |
+
$this->markTestSkipped("File permissions not supported on Windows.");
|
388 |
+
}
|
389 |
+
|
390 |
+
$target = __DIR__ . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR;
|
391 |
+
$link = __DIR__ . DIRECTORY_SEPARATOR .'link_to_files';
|
392 |
+
symlink($target, $link);
|
393 |
+
|
394 |
+
$adapter = new Local($link);
|
395 |
+
$this->assertEquals($target, $adapter->getPathPrefix());
|
396 |
+
unlink($link);
|
397 |
+
}
|
398 |
+
|
399 |
+
/**
|
400 |
+
* @expectedException \League\Flysystem\NotSupportedException
|
401 |
+
*/
|
402 |
+
public function testLinkCausedUnsupportedException()
|
403 |
+
{
|
404 |
+
$root = __DIR__ . '/files/';
|
405 |
+
$original = $root . 'original.txt';
|
406 |
+
$link = $root . 'link.txt';
|
407 |
+
file_put_contents($original, 'something');
|
408 |
+
symlink($original, $link);
|
409 |
+
$adapter = new Local($root);
|
410 |
+
$adapter->listContents();
|
411 |
+
}
|
412 |
+
|
413 |
+
public function testLinkIsSkipped()
|
414 |
+
{
|
415 |
+
$root = __DIR__ . '/files/';
|
416 |
+
$original = $root . 'original.txt';
|
417 |
+
$link = $root . 'link.txt';
|
418 |
+
file_put_contents($original, 'something');
|
419 |
+
symlink($original, $link);
|
420 |
+
$adapter = new Local($root, LOCK_EX, Local::SKIP_LINKS);
|
421 |
+
$result = $adapter->listContents();
|
422 |
+
$this->assertCount(1, $result);
|
423 |
+
}
|
424 |
+
|
425 |
+
public function testLinksAreDeletedDuringDeleteDir()
|
426 |
+
{
|
427 |
+
$root = __DIR__ . '/files/';
|
428 |
+
mkdir($root . 'subdir', 0777, true);
|
429 |
+
$original = $root . 'original.txt';
|
430 |
+
$link = $root . 'subdir/link.txt';
|
431 |
+
file_put_contents($original, 'something');
|
432 |
+
symlink($original, $link);
|
433 |
+
$adapter = new Local($root, LOCK_EX, Local::SKIP_LINKS);
|
434 |
+
|
435 |
+
$this->assertTrue(is_link($link));
|
436 |
+
$adapter->deleteDir('subdir');
|
437 |
+
$this->assertFalse(is_link($link));
|
438 |
+
}
|
439 |
+
|
440 |
+
public function testUnreadableFilesCauseAnError()
|
441 |
+
{
|
442 |
+
$this->expectException('League\Flysystem\UnreadableFileException');
|
443 |
+
|
444 |
+
$adapter = new Local(__DIR__ . '/files/', LOCK_EX, Local::SKIP_LINKS);
|
445 |
+
$reflection = new \ReflectionClass($adapter);
|
446 |
+
$method = $reflection->getMethod('guardAgainstUnreadableFileInfo');
|
447 |
+
$method->setAccessible(true);
|
448 |
+
/** @var \SplFileInfo $fileInfo */
|
449 |
+
$fileInfo = $this->prophesize('SplFileInfo');
|
450 |
+
$fileInfo->getRealPath()->willReturn('somewhere');
|
451 |
+
$fileInfo->isReadable()->willReturn(false);
|
452 |
+
$method->invoke($adapter, $fileInfo->reveal());
|
453 |
+
}
|
454 |
+
|
455 |
+
public function testMimetypeFallbackOnExtension()
|
456 |
+
{
|
457 |
+
$adapter = new Local(__DIR__ . '/files/', LOCK_EX);
|
458 |
+
$adapter->write('test.xlsx', '', new Config);
|
459 |
+
$this->assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $adapter->getMimetype('test.xlsx')['mimetype']);
|
460 |
+
}
|
461 |
+
|
462 |
+
public function testDeleteFileShouldReturnTrue(){
|
463 |
+
$root = __DIR__ . '/files/';
|
464 |
+
$original = $root . 'delete.txt';
|
465 |
+
file_put_contents($original, 'something');
|
466 |
+
$this->assertTrue($this->adapter->delete('delete.txt'));
|
467 |
+
}
|
468 |
+
|
469 |
+
public function testDeleteMissingFileShouldReturnFalse(){
|
470 |
+
$this->assertFalse($this->adapter->delete('missing.txt'));
|
471 |
+
}
|
472 |
+
|
473 |
+
/**
|
474 |
+
* @expectedException \League\Flysystem\Exception
|
475 |
+
*/
|
476 |
+
public function testRootDirectoryCreationProblemCausesAnError()
|
477 |
+
{
|
478 |
+
$root = __DIR__ . '/files/fail.plz';
|
479 |
+
new Local($root);
|
480 |
+
}
|
481 |
+
}
|
vendor/league/flysystem/tests/MountManagerTests.php
ADDED
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\AdapterInterface;
|
4 |
+
use League\Flysystem\FilesystemInterface;
|
5 |
+
use League\Flysystem\MountManager;
|
6 |
+
use League\Flysystem\Stub\FilesystemSpy;
|
7 |
+
use PHPUnit\Framework\TestCase;
|
8 |
+
use Prophecy\Argument;
|
9 |
+
|
10 |
+
class MountManagerTests extends TestCase
|
11 |
+
{
|
12 |
+
use \PHPUnitHacks;
|
13 |
+
|
14 |
+
public function testInstantiable()
|
15 |
+
{
|
16 |
+
new MountManager();
|
17 |
+
}
|
18 |
+
|
19 |
+
public function testConstructorInjection()
|
20 |
+
{
|
21 |
+
$mock = $this->createMock('League\Flysystem\FilesystemInterface');
|
22 |
+
$manager = new MountManager([
|
23 |
+
'prefix' => $mock,
|
24 |
+
]);
|
25 |
+
$this->assertEquals($mock, $manager->getFilesystem('prefix'));
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @expectedException InvalidArgumentException
|
30 |
+
*/
|
31 |
+
public function testInvalidPrefix()
|
32 |
+
{
|
33 |
+
$manager = new MountManager();
|
34 |
+
$manager->mountFilesystem(false, $this->createMock('League\Flysystem\FilesystemInterface'));
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @expectedException LogicException
|
39 |
+
*/
|
40 |
+
public function testUndefinedFilesystem()
|
41 |
+
{
|
42 |
+
$manager = new MountManager();
|
43 |
+
$manager->getFilesystem('prefix');
|
44 |
+
}
|
45 |
+
|
46 |
+
public function invalidCallProvider()
|
47 |
+
{
|
48 |
+
return [
|
49 |
+
[[], 'LogicException'],
|
50 |
+
[[false], 'InvalidArgumentException'],
|
51 |
+
[['path/without/protocol'], 'InvalidArgumentException'],
|
52 |
+
];
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @dataProvider invalidCallProvider
|
57 |
+
*/
|
58 |
+
public function testInvalidArguments($arguments, $exception)
|
59 |
+
{
|
60 |
+
$this->expectException($exception);
|
61 |
+
$manager = new MountManager();
|
62 |
+
$manager->filterPrefix($arguments);
|
63 |
+
}
|
64 |
+
|
65 |
+
public function testCopyBetweenFilesystems()
|
66 |
+
{
|
67 |
+
$manager = new MountManager();
|
68 |
+
$fs1 = $this->prophesize('League\Flysystem\FilesystemInterface');
|
69 |
+
$fs2 = $this->prophesize('League\Flysystem\FilesystemInterface');
|
70 |
+
$manager->mountFilesystem('fs1', $fs1->reveal());
|
71 |
+
$manager->mountFilesystem('fs2', $fs2->reveal());
|
72 |
+
|
73 |
+
$filename = 'test1.txt';
|
74 |
+
$buffer = tmpfile();
|
75 |
+
$fs1->readStream($filename)->willReturn($buffer)->shouldBeCalledTimes(1);
|
76 |
+
$fs2->writeStream($filename, $buffer, [])->willReturn(true)->shouldBeCalledTimes(1);
|
77 |
+
$response = $manager->copy("fs1://{$filename}", "fs2://{$filename}");
|
78 |
+
$this->assertTrue($response);
|
79 |
+
|
80 |
+
// test failed status
|
81 |
+
$filename = 'test2.txt';
|
82 |
+
$fs1->readStream($filename)->willReturn(false)->shouldBeCalledTimes(1);
|
83 |
+
$status = $manager->copy("fs1://{$filename}", "fs2://{$filename}");
|
84 |
+
$this->assertFalse($status);
|
85 |
+
|
86 |
+
$filename = 'test3.txt';
|
87 |
+
$fs1->readStream($filename)->willReturn($buffer)->shouldBeCalledTimes(1);
|
88 |
+
$fs2->writeStream($filename, $buffer, [])->willReturn(false)->shouldBeCalledTimes(1);
|
89 |
+
$status = $manager->copy("fs1://{$filename}", "fs2://{$filename}");
|
90 |
+
$this->assertFalse($status);
|
91 |
+
|
92 |
+
$filename = 'test4.txt';
|
93 |
+
$fs1->readStream($filename)->willReturn($buffer)->shouldBeCalledTimes(1);
|
94 |
+
$fs2->writeStream($filename, $buffer, [])->willReturn(true)->shouldBeCalledTimes(1);
|
95 |
+
$status = $manager->copy("fs1://{$filename}", "fs2://{$filename}");
|
96 |
+
$this->assertTrue($status);
|
97 |
+
}
|
98 |
+
|
99 |
+
public function testMoveBetweenFilesystems()
|
100 |
+
{
|
101 |
+
$manager = $this->getMockBuilder('League\Flysystem\MountManager')
|
102 |
+
->setMethods(['copy', 'delete'])
|
103 |
+
->getMock();
|
104 |
+
$fs1 = $this->prophesize('League\Flysystem\FilesystemInterface');
|
105 |
+
$fs2 = $this->prophesize('League\Flysystem\FilesystemInterface');
|
106 |
+
$manager->mountFilesystem('fs1', $fs1->reveal());
|
107 |
+
$manager->mountFilesystem('fs2', $fs2->reveal());
|
108 |
+
|
109 |
+
$filename = 'test.txt';
|
110 |
+
$buffer = tmpfile();
|
111 |
+
$fs1->readStream($filename)->willReturn($buffer);
|
112 |
+
$fs2->writeStream($filename, $buffer, [])->willReturn(false);
|
113 |
+
$code = $manager->move("fs1://{$filename}", "fs2://{$filename}");
|
114 |
+
$this->assertFalse($code);
|
115 |
+
|
116 |
+
$manager->method('copy')->with("fs1://{$filename}", "fs2://{$filename}", [])->willReturn(true);
|
117 |
+
$manager->method('delete')->with("fs1://{$filename}")->willReturn(true);
|
118 |
+
$code = $manager->move("fs1://{$filename}", "fs2://{$filename}");
|
119 |
+
|
120 |
+
$this->assertTrue($code);
|
121 |
+
}
|
122 |
+
|
123 |
+
public function testMoveSameFilesystems()
|
124 |
+
{
|
125 |
+
$manager = new MountManager();
|
126 |
+
$fs = $this->prophesize('League\Flysystem\FilesystemInterface');
|
127 |
+
$manager->mountFilesystem('fs1', $fs->reveal());
|
128 |
+
|
129 |
+
$config = ['visibility' => 'private'];
|
130 |
+
$fs->rename('old.txt', 'new.txt')->willReturn(true);
|
131 |
+
$fs->setVisibility('new.txt', 'private')->willReturn(true);
|
132 |
+
|
133 |
+
$this->assertTrue($manager->move('fs1://old.txt', 'fs1://new.txt'));
|
134 |
+
$this->assertTrue($manager->move('fs1://old.txt', 'fs1://new.txt', $config));
|
135 |
+
}
|
136 |
+
|
137 |
+
protected function mockFilesystem()
|
138 |
+
{
|
139 |
+
$mock = $this->prophesize('League\Flysystem\FilesystemInterface');
|
140 |
+
$mock->listContents(Argument::type('string'), false)->willReturn([
|
141 |
+
['path' => 'path.txt', 'type' => 'file'],
|
142 |
+
['path' => 'dirname/path.txt', 'type' => 'file'],
|
143 |
+
]);
|
144 |
+
|
145 |
+
return $mock->reveal();
|
146 |
+
}
|
147 |
+
|
148 |
+
public function testFileWithAliasWithMountManager()
|
149 |
+
{
|
150 |
+
$fs = $this->mockFilesystem();
|
151 |
+
$fs2 = $this->mockFilesystem();
|
152 |
+
|
153 |
+
$mountManager = new MountManager();
|
154 |
+
$mountManager->mountFilesystem('local', $fs);
|
155 |
+
$mountManager->mountFilesystem('huge', $fs2);
|
156 |
+
$results = $mountManager->listContents("local://tests/files");
|
157 |
+
|
158 |
+
foreach ($results as $result) {
|
159 |
+
$this->assertArrayHasKey('filesystem', $result);
|
160 |
+
$this->assertEquals($result['filesystem'], 'local');
|
161 |
+
}
|
162 |
+
|
163 |
+
$results = $mountManager->listContents("huge://tests/files");
|
164 |
+
foreach ($results as $result) {
|
165 |
+
$this->assertArrayHasKey('filesystem', $result);
|
166 |
+
$this->assertEquals($result['filesystem'], 'huge');
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
+
public function testListWith()
|
171 |
+
{
|
172 |
+
$manager = new MountManager();
|
173 |
+
$response = ['path' => 'file.ext', 'timestamp' => time()];
|
174 |
+
$mock = $this->getMockBuilder('League\Flysystem\Filesystem')->disableOriginalConstructor()->getMock();
|
175 |
+
$mock->method('__call')->with('listWith', [['timestamp'], 'file.ext', false])->willReturn($response);
|
176 |
+
$manager->mountFilesystem('prot', $mock);
|
177 |
+
$this->assertEquals($response, $manager->listWith(['timestamp'], 'prot://file.ext', false));
|
178 |
+
}
|
179 |
+
|
180 |
+
public function provideMountSchemas()
|
181 |
+
{
|
182 |
+
return [
|
183 |
+
['with.dot'],
|
184 |
+
['with-dash'],
|
185 |
+
['with+plus'],
|
186 |
+
['with:colon']
|
187 |
+
];
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* @dataProvider provideMountSchemas
|
192 |
+
*/
|
193 |
+
public function testMountSchemaTypes($schema)
|
194 |
+
{
|
195 |
+
$manager = new MountManager();
|
196 |
+
$mock = $this->getMockBuilder('League\Flysystem\Filesystem')->disableOriginalConstructor()->getMock();
|
197 |
+
$mock->method('read')->with('file.ext')->willReturn('a result');
|
198 |
+
$manager->mountFilesystem($schema, $mock);
|
199 |
+
$this->assertEquals($manager->read($schema . '://file.ext'), 'a result');
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* @dataProvider methodForwardingProvider
|
204 |
+
*/
|
205 |
+
public function testMethodForwarding($method, array $arguments)
|
206 |
+
{
|
207 |
+
$mountManager = new MountManager();
|
208 |
+
$filesystem = new FilesystemSpy();
|
209 |
+
$mountManager->mountFilesystem('local', $filesystem);
|
210 |
+
$expectedCall = FilesystemSpy::class . '::' . $method;
|
211 |
+
$callingArguments = $arguments;
|
212 |
+
$callingArguments[0] = "local://{$callingArguments[0]}";
|
213 |
+
call_user_func_array([$mountManager, $method], $callingArguments);
|
214 |
+
|
215 |
+
$this->assertEquals([$expectedCall, $arguments], $filesystem->lastCall);
|
216 |
+
}
|
217 |
+
|
218 |
+
public function methodForwardingProvider()
|
219 |
+
{
|
220 |
+
|
221 |
+
return [
|
222 |
+
['write', ['path.txt', 'contents', []]],
|
223 |
+
['writeStream', ['path.txt', 'contents', []]],
|
224 |
+
['update', ['path.txt', 'contents', []]],
|
225 |
+
['updateStream', ['path.txt', 'contents', []]],
|
226 |
+
['put', ['path.txt', 'contents', []]],
|
227 |
+
['putStream', ['path.txt', 'contents', []]],
|
228 |
+
['read', ['path.txt']],
|
229 |
+
['readStream', ['path.txt']],
|
230 |
+
['readAndDelete', ['path.txt']],
|
231 |
+
['get', ['path.txt']],
|
232 |
+
['has', ['path.txt']],
|
233 |
+
['getMetadata', ['path.txt']],
|
234 |
+
['getMimetype', ['path.txt']],
|
235 |
+
['getTimestamp', ['path.txt']],
|
236 |
+
['getSize', ['path.txt']],
|
237 |
+
['delete', ['path.txt']],
|
238 |
+
['deleteDir', ['dirname']],
|
239 |
+
['createDir', ['dirname']],
|
240 |
+
['rename', ['name', 'other-name']],
|
241 |
+
['setVisibility', ['name', AdapterInterface::VISIBILITY_PUBLIC]],
|
242 |
+
['getVisibility', ['name']],
|
243 |
+
];
|
244 |
+
}
|
245 |
+
}
|
vendor/league/flysystem/tests/NotSupportingVisivilityTests.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Stub\NotSupportingVisibilityStub;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class NotSupportingVisivilityTests extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
public function testGetVisibility()
|
13 |
+
{
|
14 |
+
$this->expectException('LogicException');
|
15 |
+
$stub = new NotSupportingVisibilityStub();
|
16 |
+
$stub->getVisibility('path.txt');
|
17 |
+
}
|
18 |
+
|
19 |
+
public function testSetVisibility()
|
20 |
+
{
|
21 |
+
$this->expectException('LogicException');
|
22 |
+
$stub = new NotSupportingVisibilityStub();
|
23 |
+
$stub->setVisibility('path.txt', 'public');
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/tests/NullAdapterTests.php
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Adapter\NullAdapter;
|
4 |
+
use League\Flysystem\Config;
|
5 |
+
use League\Flysystem\Filesystem;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class NullAdapterTest extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @return Filesystem
|
14 |
+
*/
|
15 |
+
protected function getFilesystem()
|
16 |
+
{
|
17 |
+
return new Filesystem(new NullAdapter());
|
18 |
+
}
|
19 |
+
|
20 |
+
protected function getAdapter()
|
21 |
+
{
|
22 |
+
return new NullAdapter();
|
23 |
+
}
|
24 |
+
|
25 |
+
public function testWrite()
|
26 |
+
{
|
27 |
+
$fs = $this->getFilesystem();
|
28 |
+
$result = $fs->write('path', 'contents');
|
29 |
+
$this->assertTrue($result);
|
30 |
+
$this->assertFalse($fs->has('path'));
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @expectedException \League\Flysystem\FileNotFoundException
|
35 |
+
*/
|
36 |
+
public function testRead()
|
37 |
+
{
|
38 |
+
$fs = $this->getFilesystem();
|
39 |
+
$fs->read('something');
|
40 |
+
}
|
41 |
+
|
42 |
+
public function testHas()
|
43 |
+
{
|
44 |
+
$fs = $this->getFilesystem();
|
45 |
+
$this->assertFalse($fs->has('something'));
|
46 |
+
}
|
47 |
+
|
48 |
+
public function testDelete()
|
49 |
+
{
|
50 |
+
$adapter = $this->getAdapter();
|
51 |
+
$this->assertFalse($adapter->delete('something'));
|
52 |
+
}
|
53 |
+
|
54 |
+
public function expectedFailsProvider()
|
55 |
+
{
|
56 |
+
return [
|
57 |
+
['read'],
|
58 |
+
['update'],
|
59 |
+
['read'],
|
60 |
+
['rename'],
|
61 |
+
['delete'],
|
62 |
+
['listContents', []],
|
63 |
+
['getMetadata'],
|
64 |
+
['getSize'],
|
65 |
+
['getMimetype'],
|
66 |
+
['getTimestamp'],
|
67 |
+
['getVisibility'],
|
68 |
+
['deleteDir'],
|
69 |
+
];
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @dataProvider expectedFailsProvider
|
74 |
+
*/
|
75 |
+
public function testExpectedFails($method, $result = false)
|
76 |
+
{
|
77 |
+
$adapter = new NullAdapter();
|
78 |
+
$this->assertEquals($result, $adapter->{$method}('one', 'two', new Config()));
|
79 |
+
}
|
80 |
+
|
81 |
+
public function expectedArrayResultProvider()
|
82 |
+
{
|
83 |
+
return [
|
84 |
+
['write'],
|
85 |
+
['setVisibility'],
|
86 |
+
];
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @dataProvider expectedArrayResultProvider
|
91 |
+
*/
|
92 |
+
public function testArrayResult($method)
|
93 |
+
{
|
94 |
+
$adapter = new NullAdapter();
|
95 |
+
$this->assertInternalType('array', $adapter->{$method}('one', tmpfile(), new Config(['visibility' => 'public'])));
|
96 |
+
}
|
97 |
+
|
98 |
+
public function testArrayResultForCreateDir()
|
99 |
+
{
|
100 |
+
$adapter = new NullAdapter();
|
101 |
+
$this->assertInternalType('array', $adapter->createDir('one', new Config(['visibility' => 'public'])));
|
102 |
+
}
|
103 |
+
}
|
vendor/league/flysystem/tests/PHPUnitHacks.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
trait PHPUnitHacks
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @param string $exception
|
7 |
+
*/
|
8 |
+
public function expectException($exception)
|
9 |
+
{
|
10 |
+
if (is_callable('parent::expectException')) {
|
11 |
+
return parent::expectException($exception);
|
12 |
+
}
|
13 |
+
|
14 |
+
parent::setExpectedException($exception);
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Returns a test double for the specified class.
|
19 |
+
*
|
20 |
+
* @param string $originalClassName
|
21 |
+
*
|
22 |
+
* @return PHPUnit_Framework_MockObject_MockObject
|
23 |
+
*
|
24 |
+
* @throws PHPUnit_Framework_Exception
|
25 |
+
*/
|
26 |
+
protected function createMock($originalClassName)
|
27 |
+
{
|
28 |
+
if (is_callable('parent::createMock')) {
|
29 |
+
return parent::createMock($originalClassName);
|
30 |
+
}
|
31 |
+
|
32 |
+
return $this->getMock($originalClassName);
|
33 |
+
}
|
34 |
+
}
|
vendor/league/flysystem/tests/PluginTests.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\File;
|
4 |
+
use League\Flysystem\Filesystem;
|
5 |
+
use League\Flysystem\FilesystemInterface;
|
6 |
+
use League\Flysystem\PluginInterface;
|
7 |
+
use PHPUnit\Framework\TestCase;
|
8 |
+
|
9 |
+
class MyPlugin implements PluginInterface
|
10 |
+
{
|
11 |
+
public function getMethod()
|
12 |
+
{
|
13 |
+
return 'beAwesome';
|
14 |
+
}
|
15 |
+
|
16 |
+
public function setFilesystem(FilesystemInterface $filesystem)
|
17 |
+
{
|
18 |
+
// yay
|
19 |
+
}
|
20 |
+
|
21 |
+
public function handle($argument = false)
|
22 |
+
{
|
23 |
+
return $argument;
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
class InvalidPlugin implements PluginInterface
|
28 |
+
{
|
29 |
+
public function getMethod()
|
30 |
+
{
|
31 |
+
return 'beInvalid';
|
32 |
+
}
|
33 |
+
|
34 |
+
public function setFilesystem(FilesystemInterface $filesystem)
|
35 |
+
{
|
36 |
+
// yay
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
class AuthorizePlugin implements PluginInterface
|
41 |
+
{
|
42 |
+
public function getMethod()
|
43 |
+
{
|
44 |
+
return 'authorize';
|
45 |
+
}
|
46 |
+
|
47 |
+
public function setFilesystem(FilesystemInterface $filesystem)
|
48 |
+
{
|
49 |
+
// yay
|
50 |
+
}
|
51 |
+
|
52 |
+
public function handle($path)
|
53 |
+
{
|
54 |
+
return $path !== 'bad';
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
class PluginTests extends TestCase
|
59 |
+
{
|
60 |
+
use \PHPUnitHacks;
|
61 |
+
|
62 |
+
protected $filesystem;
|
63 |
+
|
64 |
+
public function setup()
|
65 |
+
{
|
66 |
+
$this->filesystem = new Filesystem($this->createMock('League\Flysystem\AdapterInterface'));
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @expectedException \LogicException
|
71 |
+
*/
|
72 |
+
public function testPlugin()
|
73 |
+
{
|
74 |
+
$this->filesystem->addPlugin(new MyPlugin());
|
75 |
+
$this->assertEquals('result', $this->filesystem->beAwesome('result'));
|
76 |
+
$this->filesystem->unknownPlugin();
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* @expectedException \LogicException
|
81 |
+
*/
|
82 |
+
public function testInvalidPlugin()
|
83 |
+
{
|
84 |
+
$this->filesystem->addPlugin(new InvalidPlugin());
|
85 |
+
$this->filesystem->beInvalid();
|
86 |
+
}
|
87 |
+
|
88 |
+
public function testMagicCall()
|
89 |
+
{
|
90 |
+
$this->filesystem->addPlugin(new AuthorizePlugin());
|
91 |
+
|
92 |
+
$badFile = $this->filesystem->get('bad', new File());
|
93 |
+
$this->assertFalse($badFile->authorize());
|
94 |
+
|
95 |
+
$goodFile = $this->filesystem->get('good', new File());
|
96 |
+
$this->assertTrue($goodFile->authorize());
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* @expectedException \BadMethodCallException
|
101 |
+
*/
|
102 |
+
public function testBadMagicCall()
|
103 |
+
{
|
104 |
+
$file = $this->filesystem->get('foo', new File());
|
105 |
+
$file->nonExistentMethod();
|
106 |
+
}
|
107 |
+
}
|
vendor/league/flysystem/tests/StreamHasherTest.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Util\StreamHasher;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class StreamHasherTest extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
public function testHasher()
|
13 |
+
{
|
14 |
+
$filename = __DIR__.'/../src/Filesystem.php';
|
15 |
+
$this->assertEquals(
|
16 |
+
md5_file($filename),
|
17 |
+
(new StreamHasher('md5'))->hash(fopen($filename, 'r'))
|
18 |
+
);
|
19 |
+
}
|
20 |
+
}
|
vendor/league/flysystem/tests/StreamedCopyPolyfilTests.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Stub\StreamedCopyStub;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class StreamedCopyPolyfilTests extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
public function testReadFail()
|
13 |
+
{
|
14 |
+
$copy = new StreamedCopyStub(false, null);
|
15 |
+
|
16 |
+
$this->assertFalse($copy->copy('from', 'to'));
|
17 |
+
}
|
18 |
+
|
19 |
+
public function testWriteFail()
|
20 |
+
{
|
21 |
+
$stream = tmpfile();
|
22 |
+
$readResponse = compact('stream');
|
23 |
+
$copy = new StreamedCopyStub($readResponse, false);
|
24 |
+
|
25 |
+
$this->assertFalse($copy->copy('from', 'to'));
|
26 |
+
fclose($stream);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function testSuccess()
|
30 |
+
{
|
31 |
+
$stream = tmpfile();
|
32 |
+
$readResponse = compact('stream');
|
33 |
+
$copy = new StreamedCopyStub($readResponse, $readResponse);
|
34 |
+
|
35 |
+
$this->assertTrue($copy->copy('from', 'to'));
|
36 |
+
|
37 |
+
if (is_resource($stream)) {
|
38 |
+
fclose($stream);
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
vendor/league/flysystem/tests/StreamedReadingTraitTests.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Stub\StreamedReadingStub;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
class StreamedReadingTraitTests extends TestCase
|
9 |
+
{
|
10 |
+
use \PHPUnitHacks;
|
11 |
+
|
12 |
+
public function testStreamRead()
|
13 |
+
{
|
14 |
+
$stub = new StreamedReadingStub();
|
15 |
+
$result = $stub->readStream($input = 'true.ext');
|
16 |
+
$this->assertInternalType('resource', $result['stream']);
|
17 |
+
$this->assertEquals($input, stream_get_contents($result['stream']));
|
18 |
+
fclose($result['stream']);
|
19 |
+
}
|
20 |
+
|
21 |
+
public function testStreamReadFail()
|
22 |
+
{
|
23 |
+
$stub = new StreamedReadingStub();
|
24 |
+
$result = $stub->readStream('other.ext');
|
25 |
+
$this->assertFalse($result);
|
26 |
+
}
|
27 |
+
}
|
vendor/league/flysystem/tests/StreamedWritingPolyfillTests.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Adapter;
|
4 |
+
|
5 |
+
use League\Flysystem\Config;
|
6 |
+
use League\Flysystem\Stub\StreamedWritingStub;
|
7 |
+
use PHPUnit\Framework\TestCase;
|
8 |
+
|
9 |
+
class StreamedWritingPolyfillTests extends TestCase
|
10 |
+
{
|
11 |
+
use \PHPUnitHacks;
|
12 |
+
|
13 |
+
public function testWrite()
|
14 |
+
{
|
15 |
+
$stream = tmpfile();
|
16 |
+
fwrite($stream, 'contents');
|
17 |
+
$stub = new StreamedWritingStub();
|
18 |
+
$response = $stub->writeStream('path.txt', $stream, new Config());
|
19 |
+
$this->assertEquals(['path' => 'path.txt', 'contents' => 'contents'], $response);
|
20 |
+
fclose($stream);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testUpdate()
|
24 |
+
{
|
25 |
+
$stream = tmpfile();
|
26 |
+
fwrite($stream, 'contents');
|
27 |
+
$stub = new StreamedWritingStub();
|
28 |
+
$response = $stub->updateStream('path.txt', $stream, new Config());
|
29 |
+
$this->assertEquals(['path' => 'path.txt', 'contents' => 'contents'], $response);
|
30 |
+
fclose($stream);
|
31 |
+
}
|
32 |
+
}
|
vendor/league/flysystem/tests/UtilMimeTests.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem\Util;
|
4 |
+
|
5 |
+
use PHPUnit\Framework\TestCase;
|
6 |
+
|
7 |
+
$passthru = true;
|
8 |
+
|
9 |
+
function class_exists($class_name, $autoload = true)
|
10 |
+
{
|
11 |
+
global $passthru;
|
12 |
+
|
13 |
+
if ($passthru) {
|
14 |
+
return \class_exists($class_name, $autoload);
|
15 |
+
}
|
16 |
+
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
|
20 |
+
class UtilMimeTests extends TestCase
|
21 |
+
{
|
22 |
+
use \PHPUnitHacks;
|
23 |
+
|
24 |
+
public function testNoFinfoFallback()
|
25 |
+
{
|
26 |
+
global $passthru;
|
27 |
+
$passthru = false;
|
28 |
+
$this->assertNull(MimeType::detectByContent('string'));
|
29 |
+
$passthru = true;
|
30 |
+
}
|
31 |
+
|
32 |
+
public function testRetrievingAllMimetypes()
|
33 |
+
{
|
34 |
+
$map = MimeType::getExtensionToMimeTypeMap();
|
35 |
+
$this->assertInternalType('array', $map);
|
36 |
+
$this->assertEquals('application/epub+zip', $map['epub']);
|
37 |
+
}
|
38 |
+
|
39 |
+
public function testNoExtension()
|
40 |
+
{
|
41 |
+
$this->assertEquals('text/plain', MimeType::detectByFileExtension('dir/file'));
|
42 |
+
}
|
43 |
+
}
|
vendor/league/flysystem/tests/UtilTests.php
ADDED
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace League\Flysystem;
|
4 |
+
|
5 |
+
use PHPUnit\Framework\TestCase;
|
6 |
+
|
7 |
+
class UtilTests extends TestCase
|
8 |
+
{
|
9 |
+
use \PHPUnitHacks;
|
10 |
+
|
11 |
+
public function testEmulateDirectories()
|
12 |
+
{
|
13 |
+
$input = [
|
14 |
+
['dirname' => '', 'filename' => 'dummy', 'path' => 'dummy', 'type' => 'file'],
|
15 |
+
['dirname' => 'something', 'filename' => 'dummy', 'path' => 'something/dummy', 'type' => 'file'],
|
16 |
+
['dirname' => 'something', 'path' => 'something/dirname', 'type' => 'dir'],
|
17 |
+
];
|
18 |
+
$output = Util::emulateDirectories($input);
|
19 |
+
$this->assertCount(4, $output);
|
20 |
+
}
|
21 |
+
|
22 |
+
public function testContentSize()
|
23 |
+
{
|
24 |
+
$this->assertEquals(5, Util::contentSize('12345'));
|
25 |
+
$this->assertEquals(3, Util::contentSize('135'));
|
26 |
+
}
|
27 |
+
|
28 |
+
public function mapProvider()
|
29 |
+
{
|
30 |
+
return [
|
31 |
+
[['from.this' => 'value'], ['from.this' => 'to.this', 'other' => 'other'], ['to.this' => 'value']],
|
32 |
+
[['from.this' => 'value', 'no.mapping' => 'lost'], ['from.this' => 'to.this'], ['to.this' => 'value']],
|
33 |
+
];
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @dataProvider mapProvider
|
38 |
+
*/
|
39 |
+
public function testMap($from, $map, $expected)
|
40 |
+
{
|
41 |
+
$result = Util::map($from, $map);
|
42 |
+
$this->assertEquals($expected, $result);
|
43 |
+
}
|
44 |
+
|
45 |
+
public function dirnameProvider()
|
46 |
+
{
|
47 |
+
return [
|
48 |
+
['filename.txt', ''],
|
49 |
+
['dirname/filename.txt', 'dirname'],
|
50 |
+
['dirname/subdir', 'dirname'],
|
51 |
+
];
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @dataProvider dirnameProvider
|
56 |
+
*/
|
57 |
+
public function testDirname($input, $expected)
|
58 |
+
{
|
59 |
+
$result = Util::dirname($input);
|
60 |
+
$this->assertEquals($expected, $result);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function testEnsureConfig()
|
64 |
+
{
|
65 |
+
$this->assertInstanceOf('League\Flysystem\Config', Util::ensureConfig([]));
|
66 |
+
$this->assertInstanceOf('League\Flysystem\Config', Util::ensureConfig(null));
|
67 |
+
$this->assertInstanceOf('League\Flysystem\Config', Util::ensureConfig(new Config()));
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @expectedException LogicException
|
72 |
+
*/
|
73 |
+
public function testInvalidValueEnsureConfig()
|
74 |
+
{
|
75 |
+
Util::ensureConfig(false);
|
76 |
+
}
|
77 |
+
|
78 |
+
public function invalidPathProvider()
|
79 |
+
{
|
80 |
+
return [
|
81 |
+
['something/../../../hehe'],
|
82 |
+
['/something/../../..'],
|
83 |
+
['..'],
|
84 |
+
['something\\..\\..'],
|
85 |
+
['\\something\\..\\..\\dirname'],
|
86 |
+
];
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @expectedException LogicException
|
91 |
+
* @dataProvider invalidPathProvider
|
92 |
+
*/
|
93 |
+
public function testOutsideRootPath($path)
|
94 |
+
{
|
95 |
+
Util::normalizePath($path);
|
96 |
+
}
|
97 |
+
|
98 |
+
public function pathProvider()
|
99 |
+
{
|
100 |
+
return [
|
101 |
+
['.', ''],
|
102 |
+
['/path/to/dir/.', 'path/to/dir'],
|
103 |
+
['/dirname/', 'dirname'],
|
104 |
+
['dirname/..', ''],
|
105 |
+
['dirname/../', ''],
|
106 |
+
['dirname./', 'dirname.'],
|
107 |
+
['dirname/./', 'dirname'],
|
108 |
+
['dirname/.', 'dirname'],
|
109 |
+
['./dir/../././', ''],
|
110 |
+
['/something/deep/../../dirname', 'dirname'],
|
111 |
+
['00004869/files/other/10-75..stl', '00004869/files/other/10-75..stl'],
|
112 |
+
['/dirname//subdir///subsubdir', 'dirname/subdir/subsubdir'],
|
113 |
+
['\dirname\\\\subdir\\\\\\subsubdir', 'dirname/subdir/subsubdir'],
|
114 |
+
['\\\\some\shared\\\\drive', 'some/shared/drive'],
|
115 |
+
['C:\dirname\\\\subdir\\\\\\subsubdir', 'C:/dirname/subdir/subsubdir'],
|
116 |
+
['C:\\\\dirname\subdir\\\\subsubdir', 'C:/dirname/subdir/subsubdir'],
|
117 |
+
['example/path/..txt', 'example/path/..txt'],
|
118 |
+
['\\example\\path.txt', 'example/path.txt'],
|
119 |
+
['\\example\\..\\path.txt', 'path.txt'],
|
120 |
+
["some\0/path.txt", 'some/path.txt'],
|
121 |
+
];
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @dataProvider pathProvider
|
126 |
+
*/
|
127 |
+
public function testNormalizePath($input, $expected)
|
128 |
+
{
|
129 |
+
$result = Util::normalizePath($input);
|
130 |
+
$double = Util::normalizePath(Util::normalizePath($input));
|
131 |
+
$this->assertEquals($expected, $result);
|
132 |
+
$this->assertEquals($expected, $double);
|
133 |
+
}
|
134 |
+
|
135 |
+
public function pathAndContentProvider()
|
136 |
+
{
|
137 |
+
return [
|
138 |
+
['/some/file.css', '.event { background: #000; } ', 'text/css'],
|
139 |
+
['/some/file.css', 'body { background: #000; } ', 'text/css'],
|
140 |
+
['/some/file.txt', 'body { background: #000; } ', 'text/plain'],
|
141 |
+
['/1x1', base64_decode('R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='), 'image/gif'],
|
142 |
+
];
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* @dataProvider pathAndContentProvider
|
147 |
+
*/
|
148 |
+
public function testGuessMimeType($path, $content, $expected)
|
149 |
+
{
|
150 |
+
$mimeType = Util::guessMimeType($path, $content);
|
151 |
+
$this->assertEquals($expected, $mimeType);
|
152 |
+
}
|
153 |
+
|
154 |
+
public function testStreamSize()
|
155 |
+
{
|
156 |
+
$stream = tmpfile();
|
157 |
+
fwrite($stream, 'aaa');
|
158 |
+
$size = Util::getStreamSize($stream);
|
159 |
+
$this->assertEquals(3, $size);
|
160 |
+
fclose($stream);
|
161 |
+
}
|
162 |
+
|
163 |
+
public function testRewindStream()
|
164 |
+
{
|
165 |
+
$stream = tmpfile();
|
166 |
+
fwrite($stream, 'something');
|
167 |
+
$this->assertNotEquals(0, ftell($stream));
|
168 |
+
Util::rewindStream($stream);
|
169 |
+
$this->assertEquals(0, ftell($stream));
|
170 |
+
fclose($stream);
|
171 |
+
}
|
172 |
+
|
173 |
+
public function testNormalizePrefix()
|
174 |
+
{
|
175 |
+
$this->assertEquals('test/', Util::normalizePrefix('test', '/'));
|
176 |
+
$this->assertEquals('test/', Util::normalizePrefix('test/', '/'));
|
177 |
+
}
|
178 |
+
|
179 |
+
public function pathinfoPathProvider()
|
180 |
+
{
|
181 |
+
return [
|
182 |
+
[''],
|
183 |
+
['.'],
|
184 |
+
['..'],
|
185 |
+
['...'],
|
186 |
+
['/.'],
|
187 |
+
['//.'],
|
188 |
+
['///.'],
|
189 |
+
|
190 |
+
['foo'],
|
191 |
+
['/foo'],
|
192 |
+
['/foo/bar'],
|
193 |
+
['/foo/bar/'],
|
194 |
+
|
195 |
+
['file.txt'],
|
196 |
+
['foo/file.txt'],
|
197 |
+
['/foo/file.jpeg'],
|
198 |
+
|
199 |
+
['.txt'],
|
200 |
+
['dir/.txt'],
|
201 |
+
['/dir/.txt'],
|
202 |
+
|
203 |
+
['foo/bar.'],
|
204 |
+
['foo/bar..'],
|
205 |
+
['foo/bar/.'],
|
206 |
+
|
207 |
+
['c:'],
|
208 |
+
['c:\\'],
|
209 |
+
['c:/'],
|
210 |
+
['c:file'],
|
211 |
+
['c:f:ile'],
|
212 |
+
['c:f:'],
|
213 |
+
['c:d:e:'],
|
214 |
+
['AB:file'],
|
215 |
+
['AB:'],
|
216 |
+
['d:\foo\bar'],
|
217 |
+
['E:\foo\bar\\'],
|
218 |
+
['f:\foo\bar:baz'],
|
219 |
+
['G:\foo\bar:'],
|
220 |
+
['c:/foo/bar'],
|
221 |
+
['c:/foo/bar/'],
|
222 |
+
['Y:\foo\bar.txt'],
|
223 |
+
['z:\foo\bar.'],
|
224 |
+
['foo\bar'],
|
225 |
+
];
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* @dataProvider pathinfoPathProvider
|
230 |
+
*/
|
231 |
+
public function testPathinfo($path)
|
232 |
+
{
|
233 |
+
$expected = compact('path') + pathinfo($path) + ['dirname' => ''];
|
234 |
+
|
235 |
+
if (isset($expected['dirname'])) {
|
236 |
+
$expected['dirname'] = Util::normalizeDirname($expected['dirname']);
|
237 |
+
}
|
238 |
+
|
239 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
240 |
+
}
|
241 |
+
|
242 |
+
public function testPathinfoHandlesUtf8()
|
243 |
+
{
|
244 |
+
$path = 'files/繁體中文字/test.txt';
|
245 |
+
$expected = [
|
246 |
+
'path' => 'files/繁體中文字/test.txt',
|
247 |
+
'dirname' => 'files/繁體中文字',
|
248 |
+
'basename' => 'test.txt',
|
249 |
+
'extension' => 'txt',
|
250 |
+
'filename' => 'test',
|
251 |
+
];
|
252 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
253 |
+
|
254 |
+
$path = 'files/繁體中文字.txt';
|
255 |
+
$expected = [
|
256 |
+
'path' => 'files/繁體中文字.txt',
|
257 |
+
'dirname' => 'files',
|
258 |
+
'basename' => '繁體中文字.txt',
|
259 |
+
'extension' => 'txt',
|
260 |
+
'filename' => '繁體中文字',
|
261 |
+
];
|
262 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
263 |
+
|
264 |
+
$path = '👨👩👧👦👨👩👦👦👨👩👧👧/繁體中文字.txt';
|
265 |
+
$expected = [
|
266 |
+
'path' => '👨👩👧👦👨👩👦👦👨👩👧👧/繁體中文字.txt',
|
267 |
+
'dirname' => '👨👩👧👦👨👩👦👦👨👩👧👧',
|
268 |
+
'basename' => '繁體中文字.txt',
|
269 |
+
'extension' => 'txt',
|
270 |
+
'filename' => '繁體中文字',
|
271 |
+
];
|
272 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
273 |
+
|
274 |
+
$path = 'foo/bar.baz.😀😬😁';
|
275 |
+
$expected = [
|
276 |
+
'path' => 'foo/bar.baz.😀😬😁',
|
277 |
+
'dirname' => 'foo',
|
278 |
+
'basename' => 'bar.baz.😀😬😁',
|
279 |
+
'extension' => '😀😬😁',
|
280 |
+
'filename' => 'bar.baz',
|
281 |
+
];
|
282 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
283 |
+
|
284 |
+
$path = '繁體中文字/👨👩👧👦.😺😸😹😻.😀😬😁';
|
285 |
+
$expected = [
|
286 |
+
'path' => '繁體中文字/👨👩👧👦.😺😸😹😻.😀😬😁',
|
287 |
+
'dirname' => '繁體中文字',
|
288 |
+
'basename' => '👨👩👧👦.😺😸😹😻.😀😬😁',
|
289 |
+
'extension' => '😀😬😁',
|
290 |
+
'filename' => '👨👩👧👦.😺😸😹😻',
|
291 |
+
];
|
292 |
+
$this->assertSame($expected, Util::pathinfo($path));
|
293 |
+
}
|
294 |
+
}
|
vendor/league/flysystem/tests/ftp/FtpIntegrationTestCase.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\AdapterInterface;
|
4 |
+
use League\Flysystem\Filesystem;
|
5 |
+
use League\Flysystem\Plugin\ListPaths;
|
6 |
+
use PHPUnit\Framework\TestCase;
|
7 |
+
|
8 |
+
abstract class FtpIntegrationTestCase extends TestCase
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* @var Filesystem
|
12 |
+
*/
|
13 |
+
protected $filesystem;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @test
|
17 |
+
*/
|
18 |
+
public function testInstantiable()
|
19 |
+
{
|
20 |
+
if ( ! defined('FTP_BINARY')) {
|
21 |
+
$this->markTestSkipped('The FTP_BINARY constant is not defined');
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @return AdapterInterface
|
27 |
+
*/
|
28 |
+
abstract protected function setup_adapter();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @before
|
32 |
+
*/
|
33 |
+
public function setup_filesystem()
|
34 |
+
{
|
35 |
+
if ( ! defined('FTP_BINARY')) {
|
36 |
+
return;
|
37 |
+
}
|
38 |
+
$adapter = $this->setup_adapter();
|
39 |
+
$this->filesystem = new Filesystem($adapter);
|
40 |
+
$this->filesystem->addPlugin(new ListPaths());
|
41 |
+
|
42 |
+
foreach ($this->filesystem->listContents('', true) as $item) {
|
43 |
+
if ($item['path'] == '') {
|
44 |
+
continue;
|
45 |
+
}
|
46 |
+
if ($item['type'] == 'dir') {
|
47 |
+
$this->filesystem->deleteDir($item['path']);
|
48 |
+
} else {
|
49 |
+
$this->filesystem->delete($item['path']);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @test
|
56 |
+
* @depends testInstantiable
|
57 |
+
*/
|
58 |
+
public function writing_reading_deleting()
|
59 |
+
{
|
60 |
+
$filesystem = $this->filesystem;
|
61 |
+
$this->assertTrue($filesystem->put('path.txt', 'file contents'));
|
62 |
+
$this->assertEquals('file contents', $filesystem->read('path.txt'));
|
63 |
+
$this->assertTrue($filesystem->delete('path.txt'));
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @test
|
68 |
+
* @depends testInstantiable
|
69 |
+
*/
|
70 |
+
public function writing_in_a_directory_and_deleting_the_directory()
|
71 |
+
{
|
72 |
+
$filesystem = $this->filesystem;
|
73 |
+
$this->assertTrue($filesystem->write('deeply/nested/path.txt', 'contents'));
|
74 |
+
$this->assertTrue($filesystem->has('deeply/nested'));
|
75 |
+
$this->assertTrue($filesystem->has('deeply'));
|
76 |
+
$this->assertTrue($filesystem->has('deeply/nested/path.txt'));
|
77 |
+
$this->assertTrue($filesystem->deleteDir('deeply/nested'));
|
78 |
+
$this->assertFalse($filesystem->has('deeply/nested'));
|
79 |
+
$this->assertFalse($filesystem->has('deeply/nested/path.txt'));
|
80 |
+
$this->assertTrue($filesystem->has('deeply'));
|
81 |
+
$this->assertTrue($filesystem->deleteDir('deeply'));
|
82 |
+
$this->assertFalse($filesystem->has('deeply'));
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* @test
|
87 |
+
* @depends testInstantiable
|
88 |
+
*/
|
89 |
+
public function listing_files_of_a_directory()
|
90 |
+
{
|
91 |
+
$filesystem = $this->filesystem;
|
92 |
+
$filesystem->write('dirname/a.txt', 'contents');
|
93 |
+
$filesystem->write('dirname/b/b.txt', 'contents');
|
94 |
+
$filesystem->write('dirname/c.txt', 'contents');
|
95 |
+
$files = $filesystem->listPaths('', true);
|
96 |
+
$expected = ['dirname', 'dirname/a.txt', 'dirname/b', 'dirname/b/b.txt', 'dirname/c.txt'];
|
97 |
+
$filesystem->deleteDir('dirname');
|
98 |
+
$this->assertEquals($expected, $files);
|
99 |
+
}
|
100 |
+
}
|
vendor/league/flysystem/tests/ftp/FtpIntegrationTests.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Adapter\Ftp;
|
4 |
+
use League\Flysystem\AdapterInterface;
|
5 |
+
|
6 |
+
include_once __DIR__ . '/FtpIntegrationTestCase.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @group integration
|
10 |
+
*/
|
11 |
+
class FtpIntegrationTests extends FtpIntegrationTestCase
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @return AdapterInterface
|
15 |
+
*/
|
16 |
+
protected function setup_adapter()
|
17 |
+
{
|
18 |
+
return new Ftp([
|
19 |
+
'host' => 'localhost',
|
20 |
+
'username' => 'bob',
|
21 |
+
'password' => 'test',
|
22 |
+
'recurseManually' => false,
|
23 |
+
]);
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/tests/ftp/FtpManualRecursionIntegrationTests.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Adapter\Ftp;
|
4 |
+
use League\Flysystem\AdapterInterface;
|
5 |
+
|
6 |
+
include_once __DIR__.'/FtpIntegrationTestCase.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @group integration
|
10 |
+
*/
|
11 |
+
class FtpManualRecursionIntegrationTests extends FtpIntegrationTestCase
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @return AdapterInterface
|
15 |
+
*/
|
16 |
+
protected function setup_adapter()
|
17 |
+
{
|
18 |
+
return new Ftp([
|
19 |
+
'host' => 'localhost',
|
20 |
+
'username' => 'bob',
|
21 |
+
'password' => 'test',
|
22 |
+
'recurseManually' => true,
|
23 |
+
]);
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/tests/ftp/FtpdIntegrationTests.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Adapter\Ftpd;
|
4 |
+
use League\Flysystem\AdapterInterface;
|
5 |
+
|
6 |
+
include_once __DIR__ . '/FtpIntegrationTestCase.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @group integration
|
10 |
+
*/
|
11 |
+
class FtpdIntegrationTests extends FtpIntegrationTestCase
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @return AdapterInterface
|
15 |
+
*/
|
16 |
+
protected function setup_adapter()
|
17 |
+
{
|
18 |
+
return new Ftpd([
|
19 |
+
'host' => 'localhost',
|
20 |
+
'username' => 'bob',
|
21 |
+
'password' => 'test',
|
22 |
+
'recurseManually' => false,
|
23 |
+
]);
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/tests/ftp/FtpdManualRecursionIntegrationTests.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use League\Flysystem\Adapter\Ftpd;
|
4 |
+
use League\Flysystem\AdapterInterface;
|
5 |
+
|
6 |
+
include_once __DIR__ . '/FtpIntegrationTestCase.php';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @group integration
|
10 |
+
*/
|
11 |
+
class FtpdManualRecursionIntegrationTests extends FtpIntegrationTestCase
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @return AdapterInterface
|
15 |
+
*/
|
16 |
+
protected function setup_adapter()
|
17 |
+
{
|
18 |
+
return new Ftpd([
|
19 |
+
'host' => 'localhost',
|
20 |
+
'username' => 'bob',
|
21 |
+
'password' => 'test',
|
22 |
+
'recurseManually' => true,
|
23 |
+
]);
|
24 |
+
}
|
25 |
+
}
|
vendor/league/flysystem/wait_for_ftp_service.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$tries = 0;
|
4 |
+
start:
|
5 |
+
$tries++;
|
6 |
+
$success = @ftp_connect("localhost", 21, 2);
|
7 |
+
|
8 |
+
if ($success) {
|
9 |
+
fwrite(STDOUT, "Connected successfully.\n");
|
10 |
+
exit(0);
|
11 |
+
}
|
12 |
+
|
13 |
+
if ($tries > 10) {
|
14 |
+
fwrite(STDOUT, "Failed to connect.\n");
|
15 |
+
exit(1);
|
16 |
+
}
|
17 |
+
|
18 |
+
sleep(1);
|
19 |
+
fwrite(STDOUT, "Waiting for a connection...\n");
|
20 |
+
goto start;
|
vendor/mhetreramesh/flysystem-backblaze/CHANGELOG.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/CONDUCT.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/CONTRIBUTING.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/ISSUE_TEMPLATE.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/PULL_REQUEST_TEMPLATE.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/README.md
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/composer.json
CHANGED
File without changes
|
vendor/mhetreramesh/flysystem-backblaze/src/BackblazeAdapter.php
CHANGED
File without changes
|
vendor/mikey179/vfsStream
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
Subproject commit 231c73783ebb7dd9ec77916c10037eff5a2b6efe
|
vendor/mtdowling/jmespath.php/bin/perf.php
CHANGED
File without changes
|
vendor/phpseclib/phpseclib/travis/install-php-extensions.sh
CHANGED
File without changes
|
vendor/phpseclib/phpseclib/travis/run-phpunit.sh
CHANGED
File without changes
|
vendor/phpseclib/phpseclib/travis/setup-composer.sh
CHANGED
File without changes
|
vendor/phpseclib/phpseclib/travis/setup-secure-shell.sh
CHANGED
File without changes
|
vendor/phpseclib/phpseclib/travis/upload-code-coverage-html.sh
CHANGED
File without changes
|
vendor/sabre/event/examples/promise.php
CHANGED
File without changes
|
vendor/sabre/event/examples/tail.php
CHANGED
File without changes
|
xcloner.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* Plugin Name: XCloner - Site Backup and Restore
|
16 |
* Plugin URI: https://xcloner.com/
|
17 |
* Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks, as well as transfer the backup archives to remote FTP, SFTP, DropBox, Amazon S3, Google Drive, WebDAV, Backblaze, Azure accounts.
|
18 |
-
* Version: 4.1.
|
19 |
* Author: watchful
|
20 |
* Author URI: https://watchful.net/
|
21 |
* License: GPL-2.0+
|
15 |
* Plugin Name: XCloner - Site Backup and Restore
|
16 |
* Plugin URI: https://xcloner.com/
|
17 |
* Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks, as well as transfer the backup archives to remote FTP, SFTP, DropBox, Amazon S3, Google Drive, WebDAV, Backblaze, Azure accounts.
|
18 |
+
* Version: 4.1.5
|
19 |
* Author: watchful
|
20 |
* Author URI: https://watchful.net/
|
21 |
* License: GPL-2.0+
|