XCloner – Backup and Restore - Version 4.1.5

Version Description

= 3.0.3 = Please check changelog!

Download this release

Release Info

Developer watchful
Plugin Icon 128x128 XCloner – Backup and Restore
Version 4.1.5
Comparing to
See all releases

Code changes from version 4.1.4 to 4.1.5

Files changed (223) hide show
  1. .distignore +4 -0
  2. .github/workflows/main.yml +21 -0
  3. README.txt +2 -2
  4. admin/css/materialize.clockpicker.css +0 -0
  5. admin/js/materialize.clockpicker.js +0 -0
  6. admin/js/xcloner-manage-backups-class.js +560 -374
  7. admin/js/xcloner-scheduler-class.js +252 -245
  8. docs/index.html +0 -0
  9. includes/class-xcloner-remote-storage.php +2 -2
  10. vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php +0 -0
  11. vendor/gliterd/backblaze-b2/CHANGELOG.md +0 -0
  12. vendor/gliterd/backblaze-b2/CONDUCT.md +0 -0
  13. vendor/gliterd/backblaze-b2/CONTRIBUTING.md +0 -0
  14. vendor/gliterd/backblaze-b2/LICENSE +0 -0
  15. vendor/gliterd/backblaze-b2/README.md +0 -0
  16. vendor/gliterd/backblaze-b2/composer.json +0 -0
  17. vendor/gliterd/backblaze-b2/phpunit.xml +0 -0
  18. vendor/gliterd/backblaze-b2/src/Bucket.php +0 -0
  19. vendor/gliterd/backblaze-b2/src/Client.php +0 -0
  20. vendor/gliterd/backblaze-b2/src/ErrorHandler.php +0 -0
  21. vendor/gliterd/backblaze-b2/src/Exceptions/B2Exception.php +0 -0
  22. vendor/gliterd/backblaze-b2/src/Exceptions/BadJsonException.php +0 -0
  23. vendor/gliterd/backblaze-b2/src/Exceptions/BadValueException.php +0 -0
  24. vendor/gliterd/backblaze-b2/src/Exceptions/BucketAlreadyExistsException.php +0 -0
  25. vendor/gliterd/backblaze-b2/src/Exceptions/BucketNotEmptyException.php +0 -0
  26. vendor/gliterd/backblaze-b2/src/Exceptions/FileNotPresentException.php +0 -0
  27. vendor/gliterd/backblaze-b2/src/Exceptions/NotFoundException.php +0 -0
  28. vendor/gliterd/backblaze-b2/src/Exceptions/ValidationException.php +0 -0
  29. vendor/gliterd/backblaze-b2/src/File.php +0 -0
  30. vendor/gliterd/backblaze-b2/src/Http/Client.php +0 -0
  31. vendor/gliterd/backblaze-b2/tests/ClientTest.php +0 -0
  32. vendor/gliterd/backblaze-b2/tests/TestHelper.php +0 -0
  33. vendor/gliterd/backblaze-b2/tests/responses/authorize_account.json +0 -0
  34. vendor/gliterd/backblaze-b2/tests/responses/bucket_not_empty.json +0 -0
  35. vendor/gliterd/backblaze-b2/tests/responses/create_bucket_exists.json +0 -0
  36. vendor/gliterd/backblaze-b2/tests/responses/create_bucket_private.json +0 -0
  37. vendor/gliterd/backblaze-b2/tests/responses/create_bucket_public.json +0 -0
  38. vendor/gliterd/backblaze-b2/tests/responses/delete_bucket.json +0 -0
  39. vendor/gliterd/backblaze-b2/tests/responses/delete_bucket_non_existent.json +0 -0
  40. vendor/gliterd/backblaze-b2/tests/responses/delete_file.json +0 -0
  41. vendor/gliterd/backblaze-b2/tests/responses/delete_file_non_existent.json +0 -0
  42. vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_id.json +0 -0
  43. vendor/gliterd/backblaze-b2/tests/responses/download_by_incorrect_path.json +0 -0
  44. vendor/gliterd/backblaze-b2/tests/responses/download_content +0 -0
  45. vendor/gliterd/backblaze-b2/tests/responses/get_file.json +0 -0
  46. vendor/gliterd/backblaze-b2/tests/responses/get_file_non_existent.json +0 -0
  47. vendor/gliterd/backblaze-b2/tests/responses/get_upload_url.json +0 -0
  48. vendor/gliterd/backblaze-b2/tests/responses/list_buckets_0.json +0 -0
  49. vendor/gliterd/backblaze-b2/tests/responses/list_buckets_3.json +0 -0
  50. vendor/gliterd/backblaze-b2/tests/responses/list_files_empty.json +0 -0
  51. vendor/gliterd/backblaze-b2/tests/responses/list_files_page1.json +0 -0
  52. vendor/gliterd/backblaze-b2/tests/responses/list_files_page2.json +0 -0
  53. vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_private.json +0 -0
  54. vendor/gliterd/backblaze-b2/tests/responses/update_bucket_to_public.json +0 -0
  55. vendor/gliterd/backblaze-b2/tests/responses/upload.json +0 -0
  56. vendor/guzzlehttp/guzzle/.editorconfig +11 -0
  57. vendor/guzzlehttp/guzzle/.gitattributes +12 -0
  58. vendor/guzzlehttp/guzzle/.gitignore +11 -0
  59. vendor/guzzlehttp/guzzle/.travis.yml +50 -0
  60. vendor/guzzlehttp/guzzle/Makefile +59 -0
  61. vendor/guzzlehttp/guzzle/build/Burgomaster.php +385 -0
  62. vendor/guzzlehttp/guzzle/build/packager.php +27 -0
  63. vendor/guzzlehttp/guzzle/docs/Makefile +153 -0
  64. vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png +0 -0
  65. vendor/guzzlehttp/guzzle/docs/_static/logo.png +0 -0
  66. vendor/guzzlehttp/guzzle/docs/conf.py +68 -0
  67. vendor/guzzlehttp/guzzle/docs/faq.rst +193 -0
  68. vendor/guzzlehttp/guzzle/docs/handlers-and-middleware.rst +303 -0
  69. vendor/guzzlehttp/guzzle/docs/index.rst +54 -0
  70. vendor/guzzlehttp/guzzle/docs/overview.rst +161 -0
  71. vendor/guzzlehttp/guzzle/docs/psr7.rst +456 -0
  72. vendor/guzzlehttp/guzzle/docs/quickstart.rst +625 -0
  73. vendor/guzzlehttp/guzzle/docs/request-options.rst +1085 -0
  74. vendor/guzzlehttp/guzzle/docs/requirements.txt +2 -0
  75. vendor/guzzlehttp/guzzle/docs/testing.rst +196 -0
  76. vendor/guzzlehttp/guzzle/phpstan-baseline.neon +1412 -0
  77. vendor/guzzlehttp/guzzle/phpstan.neon.dist +8 -0
  78. vendor/guzzlehttp/guzzle/phpunit.xml.dist +22 -0
  79. vendor/guzzlehttp/psr7/.editorconfig +9 -0
  80. vendor/guzzlehttp/psr7/.gitattributes +7 -0
  81. vendor/guzzlehttp/psr7/.gitignore +4 -0
  82. vendor/guzzlehttp/psr7/.travis.yml +26 -0
  83. vendor/guzzlehttp/psr7/Makefile +29 -0
  84. vendor/guzzlehttp/psr7/phpunit.xml.dist +14 -0
  85. vendor/league/flysystem-sftp/.gitattributes +9 -0
  86. vendor/league/flysystem-sftp/.scrutinizer.yml +34 -0
  87. vendor/league/flysystem-sftp/.travis.yml +31 -0
  88. vendor/league/flysystem-sftp/changelog.md +78 -0
  89. vendor/league/flysystem-sftp/phpunit.hhvm.xml +23 -0
  90. vendor/league/flysystem-sftp/phpunit.xml +30 -0
  91. vendor/league/flysystem-sftp/tests/SftpAdapterTests.php +660 -0
  92. vendor/league/flysystem/.appveyor.yml +56 -0
  93. vendor/league/flysystem/.gitattributes +20 -0
  94. vendor/league/flysystem/.github/ISSUE_TEMPLATE/Bug.md +24 -0
  95. vendor/league/flysystem/.github/ISSUE_TEMPLATE/Feature_Request.md +21 -0
  96. vendor/league/flysystem/.github/ISSUE_TEMPLATE/Question.md +12 -0
  97. vendor/league/flysystem/.php_cs +31 -0
  98. vendor/league/flysystem/.scrutinizer.yml +33 -0
  99. vendor/league/flysystem/.travis.yml +46 -0
  100. vendor/league/flysystem/README.md +109 -0
  101. vendor/league/flysystem/changelog.md +403 -0
  102. vendor/league/flysystem/docs/CNAME +1 -0
  103. vendor/league/flysystem/docs/Gemfile +6 -0
  104. vendor/league/flysystem/docs/_config.yml +10 -0
  105. vendor/league/flysystem/docs/_data/menu.yml +38 -0
  106. vendor/league/flysystem/docs/_data/project.yml +5 -0
  107. vendor/league/flysystem/docs/_includes/carbon.html +1 -0
  108. vendor/league/flysystem/docs/_includes/size-helper.html +9 -0
  109. vendor/league/flysystem/docs/_layouts/default.html +99 -0
  110. vendor/league/flysystem/docs/adapter/aws-s3-v3.md +119 -0
  111. vendor/league/flysystem/docs/adapter/azure.md +36 -0
  112. vendor/league/flysystem/docs/adapter/digitalocean-spaces.md +37 -0
  113. vendor/league/flysystem/docs/adapter/dropbox.md +28 -0
  114. vendor/league/flysystem/docs/adapter/ftp.md +28 -0
  115. vendor/league/flysystem/docs/adapter/local.md +74 -0
  116. vendor/league/flysystem/docs/adapter/memory.md +23 -0
  117. vendor/league/flysystem/docs/adapter/null-test.md +19 -0
  118. vendor/league/flysystem/docs/adapter/phpcr.md +64 -0
  119. vendor/league/flysystem/docs/adapter/rackspace.md +31 -0
  120. vendor/league/flysystem/docs/adapter/replicate.md +23 -0
  121. vendor/league/flysystem/docs/adapter/sftp.md +29 -0
  122. vendor/league/flysystem/docs/adapter/webdav.md +20 -0
  123. vendor/league/flysystem/docs/adapter/zip-archive.md +29 -0
  124. vendor/league/flysystem/docs/advanced/caching.md +124 -0
  125. vendor/league/flysystem/docs/advanced/creating-an-adapter.md +57 -0
  126. vendor/league/flysystem/docs/advanced/mount-manager.md +78 -0
  127. vendor/league/flysystem/docs/advanced/performance.md +24 -0
  128. vendor/league/flysystem/docs/advanced/plugins.md +45 -0
  129. vendor/league/flysystem/docs/advanced/provided-plugins.md +42 -0
  130. vendor/league/flysystem/docs/advanced/upgrade-to-1.0.0.md +63 -0
  131. vendor/league/flysystem/docs/algolia.css +26 -0
  132. vendor/league/flysystem/docs/api.md +231 -0
  133. vendor/league/flysystem/docs/architecture.md +33 -0
  134. vendor/league/flysystem/docs/dist/main.js +1 -0
  135. vendor/league/flysystem/docs/dist/styles.css +1 -0
  136. vendor/league/flysystem/docs/favicon-16x16.png +0 -0
  137. vendor/league/flysystem/docs/favicon-32x32.png +0 -0
  138. vendor/league/flysystem/docs/favicon.ico +0 -0
  139. vendor/league/flysystem/docs/github.css +99 -0
  140. vendor/league/flysystem/docs/guides/deterministic-programming.md +71 -0
  141. vendor/league/flysystem/docs/guides/laravel-usage.md +18 -0
  142. vendor/league/flysystem/docs/guides/uploads.md +96 -0
  143. vendor/league/flysystem/docs/img/azure.svg +69 -0
  144. vendor/league/flysystem/docs/img/become_a_patron_button.png +0 -0
  145. vendor/league/flysystem/docs/img/flysystem.svg +1 -0
  146. vendor/league/flysystem/docs/img/laravel.svg +15 -0
  147. vendor/league/flysystem/docs/img/question.svg +7 -0
  148. vendor/league/flysystem/docs/index.css +132 -0
  149. vendor/league/flysystem/docs/index.js +44 -0
  150. vendor/league/flysystem/docs/index.md +53 -0
  151. vendor/league/flysystem/docs/package.json +25 -0
  152. vendor/league/flysystem/docs/postcss.config.js +7 -0
  153. vendor/league/flysystem/docs/sponsors.md +50 -0
  154. vendor/league/flysystem/docs/stubs/algolia.md +15 -0
  155. vendor/league/flysystem/docs/stubs/carbonads.md +18 -0
  156. vendor/league/flysystem/docs/tailwind.js +802 -0
  157. vendor/league/flysystem/docs/usage/filesystem-api.md +363 -0
  158. vendor/league/flysystem/docs/usage/setup.md +55 -0
  159. vendor/league/flysystem/docs/webpack.config.js +53 -0
  160. vendor/league/flysystem/docs/yarn.lock +5529 -0
  161. vendor/league/flysystem/phpspec.yml +6 -0
  162. vendor/league/flysystem/phpunit.php +20 -0
  163. vendor/league/flysystem/phpunit.xml +29 -0
  164. vendor/league/flysystem/spec/FilesystemSpec.php +225 -0
  165. vendor/league/flysystem/stub/FileOverwritingAdapterStub.php +117 -0
  166. vendor/league/flysystem/stub/FilesystemSpy.php +354 -0
  167. vendor/league/flysystem/stub/NotSupportingVisibilityStub.php +10 -0
  168. vendor/league/flysystem/stub/PluginStub.php +24 -0
  169. vendor/league/flysystem/stub/StreamedCopyStub.php +47 -0
  170. vendor/league/flysystem/stub/StreamedReadingStub.php +19 -0
  171. vendor/league/flysystem/stub/StreamedWritingStub.php +21 -0
  172. vendor/league/flysystem/tests/AdaptersThatCanOverwriteFilesTest.php +39 -0
  173. vendor/league/flysystem/tests/ConfigTests.php +30 -0
  174. vendor/league/flysystem/tests/EmptyDirPluginTests.php +31 -0
  175. vendor/league/flysystem/tests/FailTests.php +41 -0
  176. vendor/league/flysystem/tests/FileTests.php +215 -0
  177. vendor/league/flysystem/tests/FilesystemTests.php +466 -0
  178. vendor/league/flysystem/tests/FlysystemStreamTests.php +71 -0
  179. vendor/league/flysystem/tests/ForcedCopyPluginTests.php +46 -0
  180. vendor/league/flysystem/tests/ForcedRenamePluginTests.php +46 -0
  181. vendor/league/flysystem/tests/FtpTests.php +820 -0
  182. vendor/league/flysystem/tests/FtpdTests.php +79 -0
  183. vendor/league/flysystem/tests/GetWithMetadataTests.php +74 -0
  184. vendor/league/flysystem/tests/HandlerTests.php +154 -0
  185. vendor/league/flysystem/tests/ListFilesTests.php +34 -0
  186. vendor/league/flysystem/tests/ListPathsTests.php +33 -0
  187. vendor/league/flysystem/tests/ListWithTests.php +43 -0
  188. vendor/league/flysystem/tests/LocalAdapterTests.php +481 -0
  189. vendor/league/flysystem/tests/MountManagerTests.php +245 -0
  190. vendor/league/flysystem/tests/NotSupportingVisivilityTests.php +25 -0
  191. vendor/league/flysystem/tests/NullAdapterTests.php +103 -0
  192. vendor/league/flysystem/tests/PHPUnitHacks.php +34 -0
  193. vendor/league/flysystem/tests/PluginTests.php +107 -0
  194. vendor/league/flysystem/tests/StreamHasherTest.php +20 -0
  195. vendor/league/flysystem/tests/StreamedCopyPolyfilTests.php +41 -0
  196. vendor/league/flysystem/tests/StreamedReadingTraitTests.php +27 -0
  197. vendor/league/flysystem/tests/StreamedWritingPolyfillTests.php +32 -0
  198. vendor/league/flysystem/tests/UtilMimeTests.php +43 -0
  199. vendor/league/flysystem/tests/UtilTests.php +294 -0
  200. vendor/league/flysystem/tests/ftp/FtpIntegrationTestCase.php +100 -0
  201. vendor/league/flysystem/tests/ftp/FtpIntegrationTests.php +25 -0
  202. vendor/league/flysystem/tests/ftp/FtpManualRecursionIntegrationTests.php +25 -0
  203. vendor/league/flysystem/tests/ftp/FtpdIntegrationTests.php +25 -0
  204. vendor/league/flysystem/tests/ftp/FtpdManualRecursionIntegrationTests.php +25 -0
  205. vendor/league/flysystem/wait_for_ftp_service.php +20 -0
  206. vendor/mhetreramesh/flysystem-backblaze/CHANGELOG.md +0 -0
  207. vendor/mhetreramesh/flysystem-backblaze/CONDUCT.md +0 -0
  208. vendor/mhetreramesh/flysystem-backblaze/CONTRIBUTING.md +0 -0
  209. vendor/mhetreramesh/flysystem-backblaze/ISSUE_TEMPLATE.md +0 -0
  210. vendor/mhetreramesh/flysystem-backblaze/PULL_REQUEST_TEMPLATE.md +0 -0
  211. vendor/mhetreramesh/flysystem-backblaze/README.md +0 -0
  212. vendor/mhetreramesh/flysystem-backblaze/composer.json +0 -0
  213. vendor/mhetreramesh/flysystem-backblaze/src/BackblazeAdapter.php +0 -0
  214. vendor/mikey179/vfsStream +1 -0
  215. vendor/mtdowling/jmespath.php/bin/perf.php +0 -0
  216. vendor/phpseclib/phpseclib/travis/install-php-extensions.sh +0 -0
  217. vendor/phpseclib/phpseclib/travis/run-phpunit.sh +0 -0
  218. vendor/phpseclib/phpseclib/travis/setup-composer.sh +0 -0
  219. vendor/phpseclib/phpseclib/travis/setup-secure-shell.sh +0 -0
  220. vendor/phpseclib/phpseclib/travis/upload-code-coverage-html.sh +0 -0
  221. vendor/sabre/event/examples/promise.php +0 -0
  222. vendor/sabre/event/examples/tail.php +0 -0
  223. 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.4
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
- var dataTable = "";
4
-
5
- class Xcloner_Manage_Backups {
6
 
 
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: {action: 'delete_backup_by_name', name: id, storage_selection: this.storage_selection},
27
- success: function (response) {
28
- if (response.finished) {
29
- dataTable
30
- .row(jQuery(elem).parents('tr'))
31
- .remove()
32
- .draw();
33
- } else {
34
- alert("There was an error deleting the file");
35
- }
36
- },
37
- dataType: 'json'
38
- });
39
- }
 
40
  }
41
 
42
  list_backup_content_callback(backup_file, start = 0, part = 0) {
43
- var $this = this;
44
-
45
- if (backup_file) {
46
- jQuery.ajax({
47
- url: ajaxurl,
48
- method: 'post',
49
- data: {action: 'list_backup_files', file: backup_file, start: start, part: part},
50
- success: function (response) {
51
-
52
- if (response.error) {
53
- jQuery("#backup_cotent_modal .files-list").addClass("error").prepend(response.message)
54
- jQuery("#backup_cotent_modal .progress > div").addClass("determinate").removeClass(".indeterminate").css('width', "100%")
55
- return;
56
- }
57
-
58
- var files_text = [];
59
-
60
- for (var i in response.files) {
61
-
62
- if (response.total_size !== undefined) {
63
- var percent = parseInt(response.start * 100) / parseInt(response.total_size)
64
- //jQuery("#backup_cotent_modal .progress .determinate").css('width', percent + "%")
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
- error: function (xhr, textStatus, error) {
82
- jQuery("#backup_cotent_modal .files-list").addClass("error").prepend(textStatus + error)
83
- },
84
- dataType: 'json'
85
- });
86
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
-
91
  list_backup_content(backup_file) {
92
- this.file_counter = 0
93
- jQuery("#backup_cotent_modal .modal-content .files-list").text("").removeClass("error");
94
- jQuery("#backup_cotent_modal .modal-content .backup-name").text(backup_file);
95
- jQuery("#backup_cotent_modal").modal('open');
96
- jQuery("#backup_cotent_modal .progress > div").removeClass('determinate').addClass("indeterminate");
97
-
98
- this.list_backup_content_callback(backup_file)
 
 
 
 
 
 
99
  }
100
 
101
  backup_encryption_callback(backup_file, start = 0, part = 0, iv = 0) {
102
- var $this = this;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
- if (backup_file) {
105
- jQuery.ajax({
106
- url: ajaxurl,
107
- method: 'post',
108
- data: {action: 'backup_encryption', file: backup_file, start: start, part: part, iv: iv},
109
- success: function (response) {
110
-
111
- if (response.total_size !== undefined) {
112
- jQuery("#backup_encryption_modal .progress > div").removeClass('indeterminate').addClass("determinate");
113
- var percent = parseInt(response.start * 100) / parseInt(response.total_size)
114
- jQuery("#backup_encryption_modal .progress .determinate").css('width', parseInt(percent) + "%")
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
- this.file_counter = 0
147
-
148
- jQuery("#backup_encryption_modal .modal-content .backup-name").text(backup_file);
149
- jQuery("#backup_encryption_modal").modal('open');
150
- jQuery("#backup_encryption_modal .progress > div");
151
- jQuery("#backup_encryption_modal .notice").show();
152
-
153
- jQuery("#backup_encryption_modal a.btn").attr('onclick', "var xcloner_manage_backups = new Xcloner_Manage_Backups();xcloner_manage_backups.backup_encryption('"+backup_file+"', true)");
154
- jQuery("#backup_encryption_modal .modal-content .files-list").text("").removeClass("error");
155
-
156
- if( start ) {
157
- jQuery("#backup_encryption_modal .notice").hide();
158
- this.backup_encryption_callback(backup_file)
159
- }
 
 
 
 
 
 
 
 
 
160
  }
161
 
162
  backup_decryption_callback(backup_file, start = 0, part = 0, iv = 0) {
163
- var $this = this;
164
-
165
- var decryption_key = jQuery('#backup_decryption_modal #decryption_key').val();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
- if (backup_file) {
168
- jQuery.ajax({
169
- url: ajaxurl,
170
- method: 'post',
171
- data: {action: 'backup_decryption', file: backup_file, start: start, part: part, iv: iv, decryption_key: decryption_key},
172
- success: function (response) {
173
-
174
- if(!response.start){
175
- response.start = 0;
176
- }
177
- if (response.total_size !== undefined) {
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
- this.file_counter = 0
212
-
213
- jQuery("#backup_decryption_modal .modal-content .backup-name").text(backup_file);
214
- jQuery("#backup_decryption_modal").modal('open');
215
- jQuery("#backup_decryption_modal .progress > div");
216
- jQuery("#backup_decryption_modal .notice").show();
217
-
218
- jQuery("#backup_decryption_modal a.btn").attr('onclick', "var xcloner_manage_backups = new Xcloner_Manage_Backups();xcloner_manage_backups.backup_decryption('"+backup_file+"', true)");
219
- jQuery("#backup_decryption_modal .modal-content .files-list").text("").removeClass("error");
220
-
221
- if( start ) {
222
- jQuery("#backup_decryption_modal .notice").hide();
223
- this.backup_decryption_callback(backup_file)
224
- }
 
 
 
 
 
 
 
 
 
225
  }
226
 
227
  cloud_upload(backup_file) {
228
- jQuery('#remote_storage_modal').find(".backup_name").text(backup_file)
229
- jQuery('#remote_storage_modal').find("input.backup_name").val(backup_file)
230
- Materialize.updateTextFields();
231
- jQuery('.col select').material_select();
232
- jQuery("#remote_storage_modal").modal('open')
233
- jQuery("#remote_storage_modal .status").hide();
234
-
235
- jQuery(".remote-storage-form").off("submit").on("submit", function () {
236
- jQuery("#remote_storage_modal .status").show();
237
- jQuery("#remote_storage_modal .status .progress .indeterminate").removeClass("determinate").css("width", "0%");
238
- jQuery("#remote_storage_modal .status-text").removeClass("error").text("");
239
-
240
- var storage_type = jQuery("#remote_storage_modal select").val();
241
-
242
- if (backup_file) {
243
- jQuery.ajax({
244
- url: ajaxurl,
245
- method: 'post',
246
- data: {action: 'upload_backup_to_remote', file: backup_file, storage_type: storage_type},
247
- success: function (response) {
248
- if (response.error) {
249
- jQuery("#remote_storage_modal .status-text").addClass("error").text(response.message)
250
- } else {
251
- jQuery("#remote_storage_modal .status-text").removeClass("error").text("done")
252
- }
253
-
254
- jQuery("#remote_storage_modal .status .progress .indeterminate").addClass("determinate").css("width", "100%");
255
- },
256
- error: function (xhr, textStatus, error) {
257
- jQuery("#remote_storage_modal .status-text").addClass("error").text(textStatus + error)
258
- },
259
- dataType: 'json'
260
- });
261
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
 
263
- return false;
264
- })
265
  }
266
 
267
  copy_remote_to_local(backup_file) {
268
- jQuery("#local_storage_upload_modal").modal('open');
269
- jQuery("#local_storage_upload_modal .modal-content .backup-name").text(backup_file);
270
- jQuery("#local_storage_upload_modal .status-text").removeClass("error").text("");
271
- jQuery("#local_storage_upload_modal .status .progress .indeterminate").removeClass("determinate").css("width", "0%");
272
-
273
- if (backup_file) {
274
- jQuery.ajax({
275
- url: ajaxurl,
276
- method: 'post',
277
- data: {action: 'copy_backup_remote_to_local', file: backup_file, storage_type: this.storage_selection},
278
- success: function (response) {
279
- if (response.error) {
280
- jQuery("#local_storage_upload_modal .status-text").addClass("error").text(response.message)
281
- } else {
282
- jQuery("#local_storage_upload_modal .status-text").removeClass("error").text("done")
283
- }
284
-
285
- jQuery("#local_storage_upload_modal .status .progress .indeterminate").addClass("determinate").css("width", "100%");
286
- },
287
- error: function (xhr, textStatus, error) {
288
- jQuery("#local_storage_upload_modal .status-text").addClass("error").text(textStatus + error)
289
- },
290
- dataType: 'json'
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('storage_selection');
304
-
305
- dataTable = jQuery('#manage_backups').DataTable({
306
- 'responsive': true,
307
- 'bFilter': true,
308
- "order": [[2, "desc"]],
309
- buttons: [
310
- 'selectAll',
311
- 'selectNone'
312
- ],
313
- "language": {
314
- "emptyTable": "No backups available",
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
- "ajax": ajaxurl+"?action=get_manage_backups_list&storage_selection="+xcloner_manage_backups.storage_selection,
335
- "fnDrawCallback": function (oSettings) {
336
-
337
- jQuery("a.expand-multipart").on("click", function () {
338
- jQuery(this).parent().find("ul.multipart").toggle();
339
- jQuery(this).parent().find("a.expand-multipart.remove").toggle();
340
- jQuery(this).parent().find("a.expand-multipart.add").toggle();
341
- })
342
-
343
- jQuery(this).off("click", ".delete").on("click", ".delete", function (e) {
344
-
345
- var hash = jQuery(this).attr('href');
346
- var id = hash.substr(1)
347
- var data = "";
348
-
349
- if (show_delete_alert) {
350
- if (confirm('Are you sure you want to delete it?')) {
351
- xcloner_manage_backups.delete_backup_by_name(id, (this), dataTable);
352
- }
353
- } else {
354
- xcloner_manage_backups.delete_backup_by_name(id, (this), dataTable);
355
- }
356
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
 
358
- e.preventDefault();
359
- })
360
-
361
- jQuery(this).off("click", ".download").on("click", ".download", function (e) {
362
- var hash = jQuery(this).attr('href');
363
- var id = hash.substr(1)
364
- xcloner_manage_backups.download_backup_by_name(id);
365
- e.preventDefault();
366
- })
367
-
368
- jQuery(this).off("click", ".cloud-upload").on("click", ".cloud-upload", function (e) {
369
- var hash = jQuery(this).attr('href');
370
- var id = hash.substr(1)
371
- xcloner_manage_backups.cloud_upload(id);
372
- e.preventDefault();
373
- })
374
-
375
- jQuery(this).off("click", ".copy-remote-to-local").on("click", ".copy-remote-to-local", function (e) {
376
- var hash = jQuery(this).attr('href');
377
- var id = hash.substr(1)
378
- xcloner_manage_backups.copy_remote_to_local(id);
379
- e.preventDefault();
380
- })
381
-
382
- jQuery(this).off("click", ".list-backup-content").on("click", ".list-backup-content", function (e) {
383
- var hash = jQuery(this).attr('href');
384
- var id = hash.substr(1)
385
- xcloner_manage_backups.list_backup_content(id);
386
- e.preventDefault();
387
- })
388
-
389
- jQuery(this).off("click", ".backup-encryption").on("click", ".backup-encryption", function (e) {
390
- var hash = jQuery(this).attr('href');
391
- var id = hash.substr(1)
392
- xcloner_manage_backups.backup_encryption(id);
393
- e.preventDefault();
394
- })
395
-
396
- jQuery(this).off("click", ".backup-decryption").on("click", ".backup-decryption", function (e) {
397
- var hash = jQuery(this).attr('href');
398
- var id = hash.substr(1)
399
- xcloner_manage_backups.backup_decryption(id);
400
- e.preventDefault();
401
- })
402
-
403
- }
 
 
 
 
 
 
 
 
 
 
 
404
  });
405
 
406
- jQuery('#select_all').click(function () {
407
- jQuery('input:checkbox').prop('checked', this.checked);
408
  });
409
 
410
  jQuery(".delete-all").click(function () {
411
- if (confirm('Are you sure you want to delete selected items?')) {
412
- show_delete_alert = 0;
413
- jQuery('input:checkbox').each(function () {
414
- if (jQuery(this).is(":checked")) {
415
- jQuery(this).parent().parent().parent().find(".delete").trigger('click');
416
- }
417
- })
418
- show_delete_alert = 1;
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
- window.location = window.location.href.split('&storage_selection')[0] + "&storage_selection=" + jQuery(this).val();
427
- })
428
-
429
- jQuery('.modal').on('hide',function(){
430
- alert('ok')
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
- class Xcloner_Scheduler{
8
-
9
- constructor()
10
- {
11
- this.edit_modal = jQuery('.modal').modal();
12
- }
13
-
14
- get_form_params()
15
- {
16
-
17
- }
18
-
19
- get_schedule_by_id(id)
20
- {
21
- var $this = this
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
- var tables = jQuery.parseJSON(response.table_params)
92
-
93
- var tables_list = "";
94
-
95
- for(var db in tables)
96
- {
97
- for(var i in tables[db])
98
- tables_list += db+"."+tables[db][i]+"\n";
99
- }
100
-
101
- this.edit_modal.find("#table_params").val(tables_list)
102
-
103
- var files = jQuery.parseJSON(response.excluded_files)
104
- var exclude_files_list = "";
105
- for(var i in files)
106
- {
107
- exclude_files_list += files[i]+"\n";
108
-
109
- }
110
-
111
- this.edit_modal.find("#excluded_files").val(exclude_files_list)
112
-
113
- jQuery('.col select').material_select();
114
-
115
- Materialize.updateTextFields();
116
-
117
- this.edit_modal.modal('open');
118
- }
119
-
120
- save_schedule(form, dataTable)
121
- {
122
- var data = jQuery(form).serialize();
123
- var $this = this
124
-
125
- jQuery.ajax({
126
- url: ajaxurl,
127
- dataType: 'json',
128
- type: 'POST',
129
- data: data,
130
- error: function(err) {
131
- //show_ajax_error("Communication Error", "", err)
132
- //console.log(err);
133
- alert("Error saving schedule!");
134
- }
135
- }).done(function(json) {
136
-
137
- if(json.error !== undefined){
138
- alert("Error saving schedule!"+json.error);
139
- return;
140
- }
141
-
142
- $this.edit_modal.modal('close');
143
- //location.reload();
144
- dataTable.ajax.reload();
145
-
146
- });
147
-
148
- }
149
-
150
- IsJsonString(str) {
151
- try {
152
- JSON.parse(str);
153
- } catch (e) {
154
- return false;
155
- }
156
- return true;
157
- }
158
-
159
- //end class
160
- }
161
-
162
-
163
- var xcloner_scheduler = new Xcloner_Scheduler();
164
-
165
- jQuery("select[required]").css({display: "block", height: 0, padding: 0, width: 0, position: 'absolute'});
166
-
167
- dataTable = jQuery('#scheduled_backups').DataTable( {
168
- 'responsive': true,
169
- 'bFilter': false,
170
- "order": [[ 3, "desc" ]],
171
- buttons: [
172
- 'selectAll',
173
- 'selectNone'
174
- ],
175
- "language": {
176
- "emptyTable": "No schedules available",
177
- "buttons": {
178
- selectAll: "Select all items",
179
- selectNone: "Select none"
180
- }
181
- },
182
- columnDefs: [
183
- { targets: 'no-sort', orderable: false },
184
- { className: "hide-on-med-and-down", "targets": [ 3, 5 ] }
185
- ],
186
- "ajax": ajaxurl+"?action=get_scheduler_list",
187
- "fnDrawCallback": function( oSettings ) {
188
-
189
- jQuery(this).off("click", ".edit").on("click", ".edit",function(){
190
- var hash = jQuery(this).attr('href');
191
- var id = hash.substr(1)
192
- var data = xcloner_scheduler.get_schedule_by_id(id);
193
- })
194
-
195
- jQuery(this).off("click", ".delete").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
- {
200
- var data = xcloner_scheduler.delete_schedule_by_id(id, (this), dataTable);
201
- }
202
- })
203
-
204
- jQuery("span.shorten_string").each(function(){
205
- doShortText(jQuery(this));
206
- })
207
- jQuery("span.shorten_string").click(function(){
208
- jQuery(this).toggleClass("full");
209
- doShortText(jQuery(this));
210
- })
211
-
212
- }
213
- });
214
-
215
- jQuery("#save_schedule").on("submit", function(){
216
-
217
- xcloner_scheduler.save_schedule(jQuery(this), dataTable)
218
-
219
- return false;
220
- })
221
-
222
- jQuery('.timepicker').pickatime({
223
- default: 'now',
224
- min: [7,30],
225
- twelvehour: false, // change to 12 hour AM/PM clock from 24 hour
226
- donetext: 'OK',
227
- autoclose: false,
228
- vibrate: true // vibrate the device when dragging clock hand
229
- });
230
-
231
- var date_picker = jQuery('.datepicker').pickadate({
232
- format: 'd mmmm yyyy',
233
- selectMonths: true, // Creates a dropdown to control month
234
- selectYears: 15, // Creates a dropdown of 15 years to control year
235
- min: +0.1,
236
- onSet: function() {
237
- //this.close();
238
- }
239
- });
240
-
241
- var date_picker_allowed = jQuery('.datepicker_max_today').pickadate({
242
- format: 'yyyy-mm-dd',
243
- selectMonths: true, // Creates a dropdown to control month
244
- selectYears: 15, // Creates a dropdown of 15 years to control year
245
- max: +0.1,
246
- onSet: function() {
247
- //this.close();
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("xcloner_ftp_timeout", 30),
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">&lt; 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">&gt; 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.4
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+