dependabot-composer 0.112.0 → 0.112.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (907) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/vendor/autoload.php +7 -0
  3. data/helpers/vendor/bin/composer +1 -0
  4. data/helpers/vendor/bin/jsonlint +1 -0
  5. data/helpers/vendor/bin/validate-json +1 -0
  6. data/helpers/vendor/composer/ClassLoader.php +445 -0
  7. data/helpers/vendor/composer/LICENSE +21 -0
  8. data/helpers/vendor/composer/autoload_classmap.php +10 -0
  9. data/helpers/vendor/composer/autoload_files.php +12 -0
  10. data/helpers/vendor/composer/autoload_namespaces.php +9 -0
  11. data/helpers/vendor/composer/autoload_psr4.php +28 -0
  12. data/helpers/vendor/composer/autoload_real.php +70 -0
  13. data/helpers/vendor/composer/autoload_static.php +144 -0
  14. data/helpers/vendor/composer/ca-bundle/LICENSE +19 -0
  15. data/helpers/vendor/composer/ca-bundle/README.md +85 -0
  16. data/helpers/vendor/composer/ca-bundle/composer.json +54 -0
  17. data/helpers/vendor/composer/ca-bundle/res/cacert.pem +3507 -0
  18. data/helpers/vendor/composer/ca-bundle/src/CaBundle.php +310 -0
  19. data/helpers/vendor/composer/composer/.editorconfig +11 -0
  20. data/helpers/vendor/composer/composer/.gitattributes +17 -0
  21. data/helpers/vendor/composer/composer/.gitignore +11 -0
  22. data/helpers/vendor/composer/composer/CHANGELOG.md +828 -0
  23. data/helpers/vendor/composer/composer/LICENSE +19 -0
  24. data/helpers/vendor/composer/composer/PORTING_INFO +39 -0
  25. data/helpers/vendor/composer/composer/README.md +62 -0
  26. data/helpers/vendor/composer/composer/bin/compile +31 -0
  27. data/helpers/vendor/composer/composer/bin/composer +62 -0
  28. data/helpers/vendor/composer/composer/composer.json +86 -0
  29. data/helpers/vendor/composer/composer/composer.lock +1800 -0
  30. data/helpers/vendor/composer/composer/doc/00-intro.md +156 -0
  31. data/helpers/vendor/composer/composer/doc/01-basic-usage.md +266 -0
  32. data/helpers/vendor/composer/composer/doc/02-libraries.md +153 -0
  33. data/helpers/vendor/composer/composer/doc/03-cli.md +941 -0
  34. data/helpers/vendor/composer/composer/doc/04-schema.md +924 -0
  35. data/helpers/vendor/composer/composer/doc/05-repositories.md +717 -0
  36. data/helpers/vendor/composer/composer/doc/06-config.md +299 -0
  37. data/helpers/vendor/composer/composer/doc/07-community.md +35 -0
  38. data/helpers/vendor/composer/composer/doc/articles/aliases.md +111 -0
  39. data/helpers/vendor/composer/composer/doc/articles/autoloader-optimization.md +111 -0
  40. data/helpers/vendor/composer/composer/doc/articles/custom-installers.md +204 -0
  41. data/helpers/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md +356 -0
  42. data/helpers/vendor/composer/composer/doc/articles/http-basic-authentication.md +59 -0
  43. data/helpers/vendor/composer/composer/doc/articles/plugins.md +290 -0
  44. data/helpers/vendor/composer/composer/doc/articles/scripts.md +357 -0
  45. data/helpers/vendor/composer/composer/doc/articles/troubleshooting.md +309 -0
  46. data/helpers/vendor/composer/composer/doc/articles/vendor-binaries.md +110 -0
  47. data/helpers/vendor/composer/composer/doc/articles/versions.md +230 -0
  48. data/helpers/vendor/composer/composer/doc/dev/DefaultPolicy.md +55 -0
  49. data/helpers/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md +50 -0
  50. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-composer-programmatically.md +42 -0
  51. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-untrusted-packages-safely.md +19 -0
  52. data/helpers/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md +32 -0
  53. data/helpers/vendor/composer/composer/doc/faqs/which-version-numbering-system-does-composer-itself-use.md +4 -0
  54. data/helpers/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md +21 -0
  55. data/helpers/vendor/composer/composer/doc/faqs/why-are-version-constraints-combining-comparisons-and-wildcards-a-bad-idea.md +21 -0
  56. data/helpers/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md +35 -0
  57. data/helpers/vendor/composer/composer/doc/fixtures/fixtures.md +22 -0
  58. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json +158 -0
  59. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json +50 -0
  60. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json +77 -0
  61. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json +50 -0
  62. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json +16 -0
  63. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json +22 -0
  64. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json +9 -0
  65. data/helpers/vendor/composer/composer/res/composer-repository-schema.json +110 -0
  66. data/helpers/vendor/composer/composer/res/composer-schema.json +847 -0
  67. data/helpers/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php +1013 -0
  68. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php +445 -0
  69. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php +222 -0
  70. data/helpers/vendor/composer/composer/src/Composer/Cache.php +257 -0
  71. data/helpers/vendor/composer/composer/src/Composer/Command/AboutCommand.php +46 -0
  72. data/helpers/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php +166 -0
  73. data/helpers/vendor/composer/composer/src/Composer/Command/BaseCommand.php +181 -0
  74. data/helpers/vendor/composer/composer/src/Composer/Command/BaseDependencyCommand.php +255 -0
  75. data/helpers/vendor/composer/composer/src/Composer/Command/CheckPlatformReqsCommand.php +162 -0
  76. data/helpers/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php +74 -0
  77. data/helpers/vendor/composer/composer/src/Composer/Command/ConfigCommand.php +722 -0
  78. data/helpers/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php +387 -0
  79. data/helpers/vendor/composer/composer/src/Composer/Command/DependsCommand.php +57 -0
  80. data/helpers/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php +729 -0
  81. data/helpers/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php +88 -0
  82. data/helpers/vendor/composer/composer/src/Composer/Command/ExecCommand.php +97 -0
  83. data/helpers/vendor/composer/composer/src/Composer/Command/GlobalCommand.php +111 -0
  84. data/helpers/vendor/composer/composer/src/Composer/Command/HomeCommand.php +168 -0
  85. data/helpers/vendor/composer/composer/src/Composer/Command/InitCommand.php +820 -0
  86. data/helpers/vendor/composer/composer/src/Composer/Command/InstallCommand.php +124 -0
  87. data/helpers/vendor/composer/composer/src/Composer/Command/LicensesCommand.php +159 -0
  88. data/helpers/vendor/composer/composer/src/Composer/Command/OutdatedCommand.php +95 -0
  89. data/helpers/vendor/composer/composer/src/Composer/Command/ProhibitsCommand.php +57 -0
  90. data/helpers/vendor/composer/composer/src/Composer/Command/RemoveCommand.php +163 -0
  91. data/helpers/vendor/composer/composer/src/Composer/Command/RequireCommand.php +267 -0
  92. data/helpers/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php +142 -0
  93. data/helpers/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php +66 -0
  94. data/helpers/vendor/composer/composer/src/Composer/Command/SearchCommand.php +83 -0
  95. data/helpers/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php +405 -0
  96. data/helpers/vendor/composer/composer/src/Composer/Command/ShowCommand.php +1015 -0
  97. data/helpers/vendor/composer/composer/src/Composer/Command/StatusCommand.php +214 -0
  98. data/helpers/vendor/composer/composer/src/Composer/Command/SuggestsCommand.php +152 -0
  99. data/helpers/vendor/composer/composer/src/Composer/Command/UpdateCommand.php +228 -0
  100. data/helpers/vendor/composer/composer/src/Composer/Command/ValidateCommand.php +172 -0
  101. data/helpers/vendor/composer/composer/src/Composer/Compiler.php +284 -0
  102. data/helpers/vendor/composer/composer/src/Composer/Composer.php +283 -0
  103. data/helpers/vendor/composer/composer/src/Composer/Config.php +479 -0
  104. data/helpers/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php +91 -0
  105. data/helpers/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php +271 -0
  106. data/helpers/vendor/composer/composer/src/Composer/Console/Application.php +494 -0
  107. data/helpers/vendor/composer/composer/src/Composer/Console/HtmlOutputFormatter.php +90 -0
  108. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Decisions.php +211 -0
  109. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php +285 -0
  110. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/GenericRule.php +91 -0
  111. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/InstallOperation.php +66 -0
  112. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php +67 -0
  113. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php +67 -0
  114. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/OperationInterface.php +42 -0
  115. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/SolverOperation.php +50 -0
  116. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UninstallOperation.php +66 -0
  117. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UpdateOperation.php +80 -0
  118. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/PolicyInterface.php +27 -0
  119. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php +378 -0
  120. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php +257 -0
  121. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Request.php +78 -0
  122. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php +268 -0
  123. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule2Literals.php +113 -0
  124. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php +176 -0
  125. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php +376 -0
  126. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetIterator.php +94 -0
  127. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchChain.php +52 -0
  128. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php +144 -0
  129. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php +113 -0
  130. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php +874 -0
  131. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverBugException.php +27 -0
  132. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverProblemsException.php +88 -0
  133. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php +244 -0
  134. data/helpers/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php +135 -0
  135. data/helpers/vendor/composer/composer/src/Composer/Downloader/ChangeReportInterface.php +32 -0
  136. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php +325 -0
  137. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloaderInterface.php +64 -0
  138. data/helpers/vendor/composer/composer/src/Composer/Downloader/DvcsDownloaderInterface.php +32 -0
  139. data/helpers/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php +322 -0
  140. data/helpers/vendor/composer/composer/src/Composer/Downloader/FilesystemException.php +26 -0
  141. data/helpers/vendor/composer/composer/src/Composer/Downloader/FossilDownloader.php +116 -0
  142. data/helpers/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php +517 -0
  143. data/helpers/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php +84 -0
  144. data/helpers/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php +100 -0
  145. data/helpers/vendor/composer/composer/src/Composer/Downloader/PathDownloader.php +224 -0
  146. data/helpers/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php +266 -0
  147. data/helpers/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php +112 -0
  148. data/helpers/vendor/composer/composer/src/Composer/Downloader/PharDownloader.php +36 -0
  149. data/helpers/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php +91 -0
  150. data/helpers/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php +225 -0
  151. data/helpers/vendor/composer/composer/src/Composer/Downloader/TarDownloader.php +31 -0
  152. data/helpers/vendor/composer/composer/src/Composer/Downloader/TransportException.php +53 -0
  153. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsCapableDownloaderInterface.php +32 -0
  154. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php +293 -0
  155. data/helpers/vendor/composer/composer/src/Composer/Downloader/XzDownloader.php +60 -0
  156. data/helpers/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php +230 -0
  157. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/Event.php +103 -0
  158. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php +544 -0
  159. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventSubscriberInterface.php +48 -0
  160. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/ScriptExecutionException.php +20 -0
  161. data/helpers/vendor/composer/composer/src/Composer/Exception/NoSslException.php +20 -0
  162. data/helpers/vendor/composer/composer/src/Composer/Factory.php +653 -0
  163. data/helpers/vendor/composer/composer/src/Composer/IO/BaseIO.php +263 -0
  164. data/helpers/vendor/composer/composer/src/Composer/IO/BufferIO.php +86 -0
  165. data/helpers/vendor/composer/composer/src/Composer/IO/ConsoleIO.php +322 -0
  166. data/helpers/vendor/composer/composer/src/Composer/IO/IOInterface.php +207 -0
  167. data/helpers/vendor/composer/composer/src/Composer/IO/NullIO.php +129 -0
  168. data/helpers/vendor/composer/composer/src/Composer/Installer.php +1803 -0
  169. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php +214 -0
  170. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryPresenceInterface.php +30 -0
  171. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallationManager.php +326 -0
  172. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php +161 -0
  173. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php +43 -0
  174. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php +79 -0
  175. data/helpers/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php +232 -0
  176. data/helpers/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php +100 -0
  177. data/helpers/vendor/composer/composer/src/Composer/Installer/NoopInstaller.php +88 -0
  178. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvent.php +65 -0
  179. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvents.php +75 -0
  180. data/helpers/vendor/composer/composer/src/Composer/Installer/PearBinaryInstaller.php +144 -0
  181. data/helpers/vendor/composer/composer/src/Composer/Installer/PearInstaller.php +84 -0
  182. data/helpers/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php +84 -0
  183. data/helpers/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php +99 -0
  184. data/helpers/vendor/composer/composer/src/Composer/Installer/SuggestedPackagesReporter.php +151 -0
  185. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFile.php +306 -0
  186. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFormatter.php +134 -0
  187. data/helpers/vendor/composer/composer/src/Composer/Json/JsonManipulator.php +522 -0
  188. data/helpers/vendor/composer/composer/src/Composer/Json/JsonValidationException.php +34 -0
  189. data/helpers/vendor/composer/composer/src/Composer/Package/AliasPackage.php +414 -0
  190. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFilter.php +44 -0
  191. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php +105 -0
  192. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php +183 -0
  193. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiverInterface.php +43 -0
  194. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php +148 -0
  195. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ComposerExcludeFilter.php +31 -0
  196. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/GitExcludeFilter.php +79 -0
  197. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/HgExcludeFilter.php +107 -0
  198. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/PharArchiver.php +97 -0
  199. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ZipArchiver.php +74 -0
  200. data/helpers/vendor/composer/composer/src/Composer/Package/BasePackage.php +251 -0
  201. data/helpers/vendor/composer/composer/src/Composer/Package/Comparer/Comparer.php +129 -0
  202. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackage.php +199 -0
  203. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php +95 -0
  204. data/helpers/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php +151 -0
  205. data/helpers/vendor/composer/composer/src/Composer/Package/Link.php +128 -0
  206. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/EmptyConstraint.php +24 -0
  207. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php +24 -0
  208. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/MultiConstraint.php +24 -0
  209. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php +24 -0
  210. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/VersionConstraint.php +24 -0
  211. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php +290 -0
  212. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/InvalidPackageException.php +46 -0
  213. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/JsonLoader.php +45 -0
  214. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/LoaderInterface.php +30 -0
  215. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php +264 -0
  216. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php +499 -0
  217. data/helpers/vendor/composer/composer/src/Composer/Package/Locker.php +438 -0
  218. data/helpers/vendor/composer/composer/src/Composer/Package/Package.php +612 -0
  219. data/helpers/vendor/composer/composer/src/Composer/Package/PackageInterface.php +389 -0
  220. data/helpers/vendor/composer/composer/src/Composer/Package/RootAliasPackage.php +173 -0
  221. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackage.php +136 -0
  222. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackageInterface.php +142 -0
  223. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionGuesser.php +302 -0
  224. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php +81 -0
  225. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php +176 -0
  226. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/Capability.php +23 -0
  227. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/CommandProvider.php +33 -0
  228. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capable.php +43 -0
  229. data/helpers/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php +88 -0
  230. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginEvents.php +61 -0
  231. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginInterface.php +39 -0
  232. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginManager.php +406 -0
  233. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreCommandRunEvent.php +68 -0
  234. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreFileDownloadEvent.php +78 -0
  235. data/helpers/vendor/composer/composer/src/Composer/Question/StrictConfirmationQuestion.php +94 -0
  236. data/helpers/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php +208 -0
  237. data/helpers/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php +107 -0
  238. data/helpers/vendor/composer/composer/src/Composer/Repository/BaseRepository.php +157 -0
  239. data/helpers/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php +833 -0
  240. data/helpers/vendor/composer/composer/src/Composer/Repository/CompositeRepository.php +164 -0
  241. data/helpers/vendor/composer/composer/src/Composer/Repository/ConfigurableRepositoryInterface.php +23 -0
  242. data/helpers/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php +97 -0
  243. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledArrayRepository.php +24 -0
  244. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledFilesystemRepository.php +22 -0
  245. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledRepositoryInterface.php +24 -0
  246. data/helpers/vendor/composer/composer/src/Composer/Repository/InvalidRepositoryException.php +22 -0
  247. data/helpers/vendor/composer/composer/src/Composer/Repository/PackageRepository.php +61 -0
  248. data/helpers/vendor/composer/composer/src/Composer/Repository/PathRepository.php +190 -0
  249. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/BaseChannelReader.php +82 -0
  250. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelInfo.php +67 -0
  251. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelReader.php +101 -0
  252. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest10Reader.php +164 -0
  253. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest11Reader.php +139 -0
  254. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyConstraint.php +60 -0
  255. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyInfo.php +50 -0
  256. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php +317 -0
  257. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageInfo.php +94 -0
  258. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ReleaseInfo.php +50 -0
  259. data/helpers/vendor/composer/composer/src/Composer/Repository/PearRepository.php +198 -0
  260. data/helpers/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php +342 -0
  261. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryFactory.php +169 -0
  262. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryInterface.php +74 -0
  263. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php +177 -0
  264. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositorySecurityException.php +22 -0
  265. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/BitbucketDriver.php +452 -0
  266. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/FossilDriver.php +243 -0
  267. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php +91 -0
  268. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php +226 -0
  269. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php +476 -0
  270. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitLabDriver.php +518 -0
  271. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php +91 -0
  272. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php +236 -0
  273. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php +186 -0
  274. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php +397 -0
  275. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php +175 -0
  276. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriverInterface.php +117 -0
  277. data/helpers/vendor/composer/composer/src/Composer/Repository/VcsRepository.php +410 -0
  278. data/helpers/vendor/composer/composer/src/Composer/Repository/VersionCacheInterface.php +23 -0
  279. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableArrayRepository.php +66 -0
  280. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableRepositoryInterface.php +54 -0
  281. data/helpers/vendor/composer/composer/src/Composer/Script/CommandEvent.php +22 -0
  282. data/helpers/vendor/composer/composer/src/Composer/Script/Event.php +133 -0
  283. data/helpers/vendor/composer/composer/src/Composer/Script/PackageEvent.php +24 -0
  284. data/helpers/vendor/composer/composer/src/Composer/Script/ScriptEvents.php +193 -0
  285. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Keys.php +36 -0
  286. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Versions.php +75 -0
  287. data/helpers/vendor/composer/composer/src/Composer/Util/AuthHelper.php +63 -0
  288. data/helpers/vendor/composer/composer/src/Composer/Util/Bitbucket.php +245 -0
  289. data/helpers/vendor/composer/composer/src/Composer/Util/ComposerMirror.php +57 -0
  290. data/helpers/vendor/composer/composer/src/Composer/Util/ConfigValidator.php +191 -0
  291. data/helpers/vendor/composer/composer/src/Composer/Util/ErrorHandler.php +82 -0
  292. data/helpers/vendor/composer/composer/src/Composer/Util/Filesystem.php +715 -0
  293. data/helpers/vendor/composer/composer/src/Composer/Util/Git.php +374 -0
  294. data/helpers/vendor/composer/composer/src/Composer/Util/GitHub.php +180 -0
  295. data/helpers/vendor/composer/composer/src/Composer/Util/GitLab.php +172 -0
  296. data/helpers/vendor/composer/composer/src/Composer/Util/Hg.php +94 -0
  297. data/helpers/vendor/composer/composer/src/Composer/Util/IniHelper.php +64 -0
  298. data/helpers/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php +147 -0
  299. data/helpers/vendor/composer/composer/src/Composer/Util/PackageSorter.php +92 -0
  300. data/helpers/vendor/composer/composer/src/Composer/Util/Perforce.php +579 -0
  301. data/helpers/vendor/composer/composer/src/Composer/Util/Platform.php +92 -0
  302. data/helpers/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php +193 -0
  303. data/helpers/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php +1126 -0
  304. data/helpers/vendor/composer/composer/src/Composer/Util/Silencer.php +78 -0
  305. data/helpers/vendor/composer/composer/src/Composer/Util/SpdxLicense.php +24 -0
  306. data/helpers/vendor/composer/composer/src/Composer/Util/StreamContextFactory.php +177 -0
  307. data/helpers/vendor/composer/composer/src/Composer/Util/Svn.php +381 -0
  308. data/helpers/vendor/composer/composer/src/Composer/Util/TlsHelper.php +202 -0
  309. data/helpers/vendor/composer/composer/src/Composer/Util/Url.php +55 -0
  310. data/helpers/vendor/composer/composer/src/Composer/Util/Zip.php +108 -0
  311. data/helpers/vendor/composer/composer/src/Composer/XdebugHandler.php +31 -0
  312. data/helpers/vendor/composer/composer/src/bootstrap.php +24 -0
  313. data/helpers/vendor/composer/installed.json +1051 -0
  314. data/helpers/vendor/composer/semver/CHANGELOG.md +72 -0
  315. data/helpers/vendor/composer/semver/LICENSE +19 -0
  316. data/helpers/vendor/composer/semver/README.md +70 -0
  317. data/helpers/vendor/composer/semver/composer.json +58 -0
  318. data/helpers/vendor/composer/semver/src/Comparator.php +111 -0
  319. data/helpers/vendor/composer/semver/src/Constraint/AbstractConstraint.php +63 -0
  320. data/helpers/vendor/composer/semver/src/Constraint/Constraint.php +219 -0
  321. data/helpers/vendor/composer/semver/src/Constraint/ConstraintInterface.php +32 -0
  322. data/helpers/vendor/composer/semver/src/Constraint/EmptyConstraint.php +59 -0
  323. data/helpers/vendor/composer/semver/src/Constraint/MultiConstraint.php +120 -0
  324. data/helpers/vendor/composer/semver/src/Semver.php +127 -0
  325. data/helpers/vendor/composer/semver/src/VersionParser.php +540 -0
  326. data/helpers/vendor/composer/spdx-licenses/.php_cs.dist +59 -0
  327. data/helpers/vendor/composer/spdx-licenses/CHANGELOG.md +94 -0
  328. data/helpers/vendor/composer/spdx-licenses/LICENSE +19 -0
  329. data/helpers/vendor/composer/spdx-licenses/README.md +69 -0
  330. data/helpers/vendor/composer/spdx-licenses/composer.json +56 -0
  331. data/helpers/vendor/composer/spdx-licenses/res/spdx-exceptions.json +110 -0
  332. data/helpers/vendor/composer/spdx-licenses/res/spdx-licenses.json +1982 -0
  333. data/helpers/vendor/composer/spdx-licenses/src/SpdxLicenses.php +343 -0
  334. data/helpers/vendor/composer/xdebug-handler/CHANGELOG.md +59 -0
  335. data/helpers/vendor/composer/xdebug-handler/LICENSE +21 -0
  336. data/helpers/vendor/composer/xdebug-handler/README.md +288 -0
  337. data/helpers/vendor/composer/xdebug-handler/composer.json +40 -0
  338. data/helpers/vendor/composer/xdebug-handler/src/PhpConfig.php +73 -0
  339. data/helpers/vendor/composer/xdebug-handler/src/Process.php +170 -0
  340. data/helpers/vendor/composer/xdebug-handler/src/Status.php +163 -0
  341. data/helpers/vendor/composer/xdebug-handler/src/XdebugHandler.php +565 -0
  342. data/helpers/vendor/justinrainbow/json-schema/.gitattributes +5 -0
  343. data/helpers/vendor/justinrainbow/json-schema/.php_cs.dist +30 -0
  344. data/helpers/vendor/justinrainbow/json-schema/LICENSE +21 -0
  345. data/helpers/vendor/justinrainbow/json-schema/README.md +206 -0
  346. data/helpers/vendor/justinrainbow/json-schema/bin/validate-json +251 -0
  347. data/helpers/vendor/justinrainbow/json-schema/composer.json +76 -0
  348. data/helpers/vendor/justinrainbow/json-schema/demo/README.md +14 -0
  349. data/helpers/vendor/justinrainbow/json-schema/demo/data.json +3 -0
  350. data/helpers/vendor/justinrainbow/json-schema/demo/demo.php +18 -0
  351. data/helpers/vendor/justinrainbow/json-schema/demo/schema.json +3 -0
  352. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json +174 -0
  353. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json +150 -0
  354. data/helpers/vendor/justinrainbow/json-schema/phpunit.xml.dist +26 -0
  355. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php +148 -0
  356. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php +121 -0
  357. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php +213 -0
  358. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php +65 -0
  359. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php +54 -0
  360. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php +220 -0
  361. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php +214 -0
  362. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php +81 -0
  363. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php +192 -0
  364. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php +94 -0
  365. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php +60 -0
  366. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php +68 -0
  367. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php +40 -0
  368. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php +18 -0
  369. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php +261 -0
  370. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php +413 -0
  371. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php +161 -0
  372. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php +7 -0
  373. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php +17 -0
  374. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php +17 -0
  375. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php +17 -0
  376. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php +17 -0
  377. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php +17 -0
  378. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php +40 -0
  379. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php +17 -0
  380. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php +17 -0
  381. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php +19 -0
  382. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php +17 -0
  383. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php +14 -0
  384. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php +149 -0
  385. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php +30 -0
  386. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php +169 -0
  387. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php +41 -0
  388. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php +34 -0
  389. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php +83 -0
  390. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php +93 -0
  391. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php +56 -0
  392. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php +36 -0
  393. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php +175 -0
  394. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php +349 -0
  395. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php +26 -0
  396. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php +26 -0
  397. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php +90 -0
  398. data/helpers/vendor/psr/container/.gitignore +3 -0
  399. data/helpers/vendor/psr/container/LICENSE +21 -0
  400. data/helpers/vendor/psr/container/README.md +5 -0
  401. data/helpers/vendor/psr/container/composer.json +27 -0
  402. data/helpers/vendor/psr/container/src/ContainerExceptionInterface.php +13 -0
  403. data/helpers/vendor/psr/container/src/ContainerInterface.php +37 -0
  404. data/helpers/vendor/psr/container/src/NotFoundExceptionInterface.php +13 -0
  405. data/helpers/vendor/psr/log/.gitignore +1 -0
  406. data/helpers/vendor/psr/log/LICENSE +19 -0
  407. data/helpers/vendor/psr/log/Psr/Log/AbstractLogger.php +128 -0
  408. data/helpers/vendor/psr/log/Psr/Log/InvalidArgumentException.php +7 -0
  409. data/helpers/vendor/psr/log/Psr/Log/LogLevel.php +18 -0
  410. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +18 -0
  411. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +26 -0
  412. data/helpers/vendor/psr/log/Psr/Log/LoggerInterface.php +123 -0
  413. data/helpers/vendor/psr/log/Psr/Log/LoggerTrait.php +140 -0
  414. data/helpers/vendor/psr/log/Psr/Log/NullLogger.php +28 -0
  415. data/helpers/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +144 -0
  416. data/helpers/vendor/psr/log/Psr/Log/Test/TestLogger.php +146 -0
  417. data/helpers/vendor/psr/log/README.md +52 -0
  418. data/helpers/vendor/psr/log/composer.json +26 -0
  419. data/helpers/vendor/seld/jsonlint/.gitignore +3 -0
  420. data/helpers/vendor/seld/jsonlint/.travis.yml +25 -0
  421. data/helpers/vendor/seld/jsonlint/CHANGELOG.md +66 -0
  422. data/helpers/vendor/seld/jsonlint/LICENSE +19 -0
  423. data/helpers/vendor/seld/jsonlint/README.md +89 -0
  424. data/helpers/vendor/seld/jsonlint/bin/jsonlint +117 -0
  425. data/helpers/vendor/seld/jsonlint/composer.json +24 -0
  426. data/helpers/vendor/seld/jsonlint/phpunit.xml.dist +25 -0
  427. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php +26 -0
  428. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php +502 -0
  429. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php +217 -0
  430. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php +28 -0
  431. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php +16 -0
  432. data/helpers/vendor/seld/jsonlint/tests/JsonParserTest.php +230 -0
  433. data/helpers/vendor/seld/jsonlint/tests/bom.json +6 -0
  434. data/helpers/vendor/seld/jsonlint/tests/bootstrap.php +13 -0
  435. data/helpers/vendor/seld/phar-utils/.gitignore +1 -0
  436. data/helpers/vendor/seld/phar-utils/LICENSE +19 -0
  437. data/helpers/vendor/seld/phar-utils/README.md +39 -0
  438. data/helpers/vendor/seld/phar-utils/composer.json +26 -0
  439. data/helpers/vendor/seld/phar-utils/composer.lock +19 -0
  440. data/helpers/vendor/seld/phar-utils/src/Timestamps.php +192 -0
  441. data/helpers/vendor/symfony/console/.gitignore +3 -0
  442. data/helpers/vendor/symfony/console/Application.php +1194 -0
  443. data/helpers/vendor/symfony/console/CHANGELOG.md +148 -0
  444. data/helpers/vendor/symfony/console/Command/Command.php +654 -0
  445. data/helpers/vendor/symfony/console/Command/HelpCommand.php +81 -0
  446. data/helpers/vendor/symfony/console/Command/ListCommand.php +90 -0
  447. data/helpers/vendor/symfony/console/Command/LockableTrait.php +71 -0
  448. data/helpers/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +46 -0
  449. data/helpers/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +64 -0
  450. data/helpers/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +62 -0
  451. data/helpers/vendor/symfony/console/ConsoleEvents.php +47 -0
  452. data/helpers/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +98 -0
  453. data/helpers/vendor/symfony/console/Descriptor/ApplicationDescription.php +144 -0
  454. data/helpers/vendor/symfony/console/Descriptor/Descriptor.php +107 -0
  455. data/helpers/vendor/symfony/console/Descriptor/DescriptorInterface.php +31 -0
  456. data/helpers/vendor/symfony/console/Descriptor/JsonDescriptor.php +170 -0
  457. data/helpers/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +182 -0
  458. data/helpers/vendor/symfony/console/Descriptor/TextDescriptor.php +342 -0
  459. data/helpers/vendor/symfony/console/Descriptor/XmlDescriptor.php +245 -0
  460. data/helpers/vendor/symfony/console/Event/ConsoleCommandEvent.php +60 -0
  461. data/helpers/vendor/symfony/console/Event/ConsoleErrorEvent.php +58 -0
  462. data/helpers/vendor/symfony/console/Event/ConsoleEvent.php +67 -0
  463. data/helpers/vendor/symfony/console/Event/ConsoleTerminateEvent.php +53 -0
  464. data/helpers/vendor/symfony/console/EventListener/ErrorListener.php +91 -0
  465. data/helpers/vendor/symfony/console/Exception/CommandNotFoundException.php +43 -0
  466. data/helpers/vendor/symfony/console/Exception/ExceptionInterface.php +21 -0
  467. data/helpers/vendor/symfony/console/Exception/InvalidArgumentException.php +19 -0
  468. data/helpers/vendor/symfony/console/Exception/InvalidOptionException.php +21 -0
  469. data/helpers/vendor/symfony/console/Exception/LogicException.php +19 -0
  470. data/helpers/vendor/symfony/console/Exception/NamespaceNotFoundException.php +21 -0
  471. data/helpers/vendor/symfony/console/Exception/RuntimeException.php +19 -0
  472. data/helpers/vendor/symfony/console/Formatter/OutputFormatter.php +284 -0
  473. data/helpers/vendor/symfony/console/Formatter/OutputFormatterInterface.php +71 -0
  474. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyle.php +197 -0
  475. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +62 -0
  476. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php +110 -0
  477. data/helpers/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +25 -0
  478. data/helpers/vendor/symfony/console/Helper/DebugFormatterHelper.php +127 -0
  479. data/helpers/vendor/symfony/console/Helper/DescriptorHelper.php +94 -0
  480. data/helpers/vendor/symfony/console/Helper/Dumper.php +64 -0
  481. data/helpers/vendor/symfony/console/Helper/FormatterHelper.php +106 -0
  482. data/helpers/vendor/symfony/console/Helper/Helper.php +138 -0
  483. data/helpers/vendor/symfony/console/Helper/HelperInterface.php +39 -0
  484. data/helpers/vendor/symfony/console/Helper/HelperSet.php +108 -0
  485. data/helpers/vendor/symfony/console/Helper/InputAwareHelper.php +33 -0
  486. data/helpers/vendor/symfony/console/Helper/ProcessHelper.php +156 -0
  487. data/helpers/vendor/symfony/console/Helper/ProgressBar.php +545 -0
  488. data/helpers/vendor/symfony/console/Helper/ProgressIndicator.php +269 -0
  489. data/helpers/vendor/symfony/console/Helper/QuestionHelper.php +479 -0
  490. data/helpers/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +96 -0
  491. data/helpers/vendor/symfony/console/Helper/Table.php +813 -0
  492. data/helpers/vendor/symfony/console/Helper/TableCell.php +68 -0
  493. data/helpers/vendor/symfony/console/Helper/TableRows.php +32 -0
  494. data/helpers/vendor/symfony/console/Helper/TableSeparator.php +25 -0
  495. data/helpers/vendor/symfony/console/Helper/TableStyle.php +458 -0
  496. data/helpers/vendor/symfony/console/Input/ArgvInput.php +365 -0
  497. data/helpers/vendor/symfony/console/Input/ArrayInput.php +206 -0
  498. data/helpers/vendor/symfony/console/Input/Input.php +203 -0
  499. data/helpers/vendor/symfony/console/Input/InputArgument.php +129 -0
  500. data/helpers/vendor/symfony/console/Input/InputAwareInterface.php +26 -0
  501. data/helpers/vendor/symfony/console/Input/InputDefinition.php +404 -0
  502. data/helpers/vendor/symfony/console/Input/InputInterface.php +163 -0
  503. data/helpers/vendor/symfony/console/Input/InputOption.php +208 -0
  504. data/helpers/vendor/symfony/console/Input/StreamableInputInterface.php +37 -0
  505. data/helpers/vendor/symfony/console/Input/StringInput.php +72 -0
  506. data/helpers/vendor/symfony/console/LICENSE +19 -0
  507. data/helpers/vendor/symfony/console/Logger/ConsoleLogger.php +124 -0
  508. data/helpers/vendor/symfony/console/Output/BufferedOutput.php +45 -0
  509. data/helpers/vendor/symfony/console/Output/ConsoleOutput.php +161 -0
  510. data/helpers/vendor/symfony/console/Output/ConsoleOutputInterface.php +32 -0
  511. data/helpers/vendor/symfony/console/Output/ConsoleSectionOutput.php +141 -0
  512. data/helpers/vendor/symfony/console/Output/NullOutput.php +123 -0
  513. data/helpers/vendor/symfony/console/Output/Output.php +177 -0
  514. data/helpers/vendor/symfony/console/Output/OutputInterface.php +114 -0
  515. data/helpers/vendor/symfony/console/Output/StreamOutput.php +124 -0
  516. data/helpers/vendor/symfony/console/Question/ChoiceQuestion.php +182 -0
  517. data/helpers/vendor/symfony/console/Question/ConfirmationQuestion.php +59 -0
  518. data/helpers/vendor/symfony/console/Question/Question.php +277 -0
  519. data/helpers/vendor/symfony/console/README.md +20 -0
  520. data/helpers/vendor/symfony/console/Resources/bin/hiddeninput.exe +0 -0
  521. data/helpers/vendor/symfony/console/Style/OutputStyle.php +155 -0
  522. data/helpers/vendor/symfony/console/Style/StyleInterface.php +154 -0
  523. data/helpers/vendor/symfony/console/Style/SymfonyStyle.php +438 -0
  524. data/helpers/vendor/symfony/console/Terminal.php +137 -0
  525. data/helpers/vendor/symfony/console/Tester/ApplicationTester.php +77 -0
  526. data/helpers/vendor/symfony/console/Tester/CommandTester.php +78 -0
  527. data/helpers/vendor/symfony/console/Tester/TesterTrait.php +177 -0
  528. data/helpers/vendor/symfony/console/Tests/ApplicationTest.php +1836 -0
  529. data/helpers/vendor/symfony/console/Tests/Command/CommandTest.php +436 -0
  530. data/helpers/vendor/symfony/console/Tests/Command/HelpCommandTest.php +71 -0
  531. data/helpers/vendor/symfony/console/Tests/Command/ListCommandTest.php +113 -0
  532. data/helpers/vendor/symfony/console/Tests/Command/LockableTraitTest.php +67 -0
  533. data/helpers/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php +61 -0
  534. data/helpers/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php +60 -0
  535. data/helpers/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php +258 -0
  536. data/helpers/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php +107 -0
  537. data/helpers/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php +35 -0
  538. data/helpers/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php +45 -0
  539. data/helpers/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php +82 -0
  540. data/helpers/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php +53 -0
  541. data/helpers/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php +27 -0
  542. data/helpers/vendor/symfony/console/Tests/EventListener/ErrorListenerTest.php +156 -0
  543. data/helpers/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php +11 -0
  544. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php +18 -0
  545. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php +26 -0
  546. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplicationMbString.php +24 -0
  547. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php +27 -0
  548. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php +32 -0
  549. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand3.php +27 -0
  550. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand4.php +25 -0
  551. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommandMbString.php +32 -0
  552. data/helpers/vendor/symfony/console/Tests/Fixtures/DummyOutput.php +36 -0
  553. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo1Command.php +26 -0
  554. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo2Command.php +21 -0
  555. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo3Command.php +29 -0
  556. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo4Command.php +11 -0
  557. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo5Command.php +10 -0
  558. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo6Command.php +11 -0
  559. data/helpers/vendor/symfony/console/Tests/Fixtures/FooCommand.php +33 -0
  560. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLock2Command.php +28 -0
  561. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLockCommand.php +27 -0
  562. data/helpers/vendor/symfony/console/Tests/Fixtures/FooOptCommand.php +36 -0
  563. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseLowercaseCommand.php +11 -0
  564. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseUppercaseCommand.php +11 -0
  565. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php +26 -0
  566. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php +26 -0
  567. data/helpers/vendor/symfony/console/Tests/Fixtures/FooWithoutAliasCommand.php +21 -0
  568. data/helpers/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php +25 -0
  569. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php +11 -0
  570. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php +13 -0
  571. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_10.php +17 -0
  572. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_11.php +12 -0
  573. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_12.php +13 -0
  574. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_13.php +14 -0
  575. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_14.php +17 -0
  576. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_15.php +14 -0
  577. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_16.php +15 -0
  578. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_17.php +13 -0
  579. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php +16 -0
  580. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php +12 -0
  581. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php +34 -0
  582. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4_with_iterators.php +34 -0
  583. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php +37 -0
  584. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php +16 -0
  585. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php +15 -0
  586. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_8.php +26 -0
  587. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_9.php +11 -0
  588. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/interactive_command_1.php +19 -0
  589. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/interactive_output_1.txt +7 -0
  590. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt +3 -0
  591. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt +9 -0
  592. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_10.txt +7 -0
  593. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_11.txt +4 -0
  594. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_12.txt +6 -0
  595. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt +7 -0
  596. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_14.txt +6 -0
  597. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_15.txt +7 -0
  598. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_16.txt +8 -0
  599. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_17.txt +7 -0
  600. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt +13 -0
  601. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt +7 -0
  602. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt +32 -0
  603. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4_with_iterators.txt +32 -0
  604. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt +18 -0
  605. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt +6 -0
  606. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt +5 -0
  607. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_8.txt +9 -0
  608. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_9.txt +5 -0
  609. data/helpers/vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering.php +22 -0
  610. data/helpers/vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php +21 -0
  611. data/helpers/vendor/symfony/console/Tests/Fixtures/TestCommand.php +28 -0
  612. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.json +156 -0
  613. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.md +172 -0
  614. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.txt +17 -0
  615. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.xml +104 -0
  616. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.json +509 -0
  617. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.md +431 -0
  618. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.txt +21 -0
  619. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.xml +254 -0
  620. data/helpers/vendor/symfony/console/Tests/Fixtures/application_filtered_namespace.txt +16 -0
  621. data/helpers/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt +1 -0
  622. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.md +269 -0
  623. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.txt +19 -0
  624. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt +5 -0
  625. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt +7 -0
  626. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt +18 -0
  627. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt +18 -0
  628. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt +6 -0
  629. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt +8 -0
  630. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt +8 -0
  631. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt +9 -0
  632. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_escapeslines.txt +9 -0
  633. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_linebreaks.txt +11 -0
  634. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run1.txt +17 -0
  635. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run2.txt +29 -0
  636. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run3.txt +29 -0
  637. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run4.txt +1 -0
  638. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.json +15 -0
  639. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.md +12 -0
  640. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.txt +10 -0
  641. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.xml +12 -0
  642. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.json +33 -0
  643. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.md +29 -0
  644. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.txt +16 -0
  645. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.xml +21 -0
  646. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.md +29 -0
  647. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.txt +16 -0
  648. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.json +7 -0
  649. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.md +5 -0
  650. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt +1 -0
  651. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml +5 -0
  652. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.json +7 -0
  653. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.md +7 -0
  654. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt +1 -0
  655. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml +5 -0
  656. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.json +7 -0
  657. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.md +7 -0
  658. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt +1 -0
  659. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml +7 -0
  660. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.json +7 -0
  661. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.md +8 -0
  662. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt +2 -0
  663. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml +6 -0
  664. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.json +7 -0
  665. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.md +7 -0
  666. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.txt +1 -0
  667. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.xml +7 -0
  668. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.json +7 -0
  669. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.md +7 -0
  670. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.txt +1 -0
  671. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.xml +7 -0
  672. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.json +4 -0
  673. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.md +0 -0
  674. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt +0 -0
  675. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml +5 -0
  676. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.json +12 -0
  677. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.md +7 -0
  678. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt +2 -0
  679. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml +10 -0
  680. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.json +14 -0
  681. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.md +8 -0
  682. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt +2 -0
  683. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml +9 -0
  684. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.json +22 -0
  685. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.md +16 -0
  686. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt +5 -0
  687. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml +14 -0
  688. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.json +9 -0
  689. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.md +6 -0
  690. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.txt +1 -0
  691. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.xml +4 -0
  692. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.json +9 -0
  693. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.md +8 -0
  694. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.txt +1 -0
  695. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.xml +7 -0
  696. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.json +9 -0
  697. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.md +8 -0
  698. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.txt +1 -0
  699. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.xml +5 -0
  700. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.json +9 -0
  701. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.md +8 -0
  702. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.txt +1 -0
  703. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.xml +5 -0
  704. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.json +9 -0
  705. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.md +9 -0
  706. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.txt +2 -0
  707. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.xml +6 -0
  708. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.json +9 -0
  709. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.md +8 -0
  710. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.txt +1 -0
  711. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.xml +5 -0
  712. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.json +9 -0
  713. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.md +8 -0
  714. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.txt +1 -0
  715. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.xml +7 -0
  716. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.json +9 -0
  717. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.md +8 -0
  718. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.txt +1 -0
  719. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.xml +7 -0
  720. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.json +12 -0
  721. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.md +8 -0
  722. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.txt +1 -0
  723. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.xml +8 -0
  724. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php +71 -0
  725. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php +115 -0
  726. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php +350 -0
  727. data/helpers/vendor/symfony/console/Tests/Helper/AbstractQuestionHelperTest.php +34 -0
  728. data/helpers/vendor/symfony/console/Tests/Helper/DumperNativeFallbackTest.php +58 -0
  729. data/helpers/vendor/symfony/console/Tests/Helper/DumperTest.php +58 -0
  730. data/helpers/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php +129 -0
  731. data/helpers/vendor/symfony/console/Tests/Helper/HelperSetTest.php +127 -0
  732. data/helpers/vendor/symfony/console/Tests/Helper/HelperTest.php +55 -0
  733. data/helpers/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php +133 -0
  734. data/helpers/vendor/symfony/console/Tests/Helper/ProgressBarTest.php +947 -0
  735. data/helpers/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php +183 -0
  736. data/helpers/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php +789 -0
  737. data/helpers/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php +168 -0
  738. data/helpers/vendor/symfony/console/Tests/Helper/TableStyleTest.php +28 -0
  739. data/helpers/vendor/symfony/console/Tests/Helper/TableTest.php +1199 -0
  740. data/helpers/vendor/symfony/console/Tests/Input/ArgvInputTest.php +466 -0
  741. data/helpers/vendor/symfony/console/Tests/Input/ArrayInputTest.php +177 -0
  742. data/helpers/vendor/symfony/console/Tests/Input/InputArgumentTest.php +103 -0
  743. data/helpers/vendor/symfony/console/Tests/Input/InputDefinitionTest.php +407 -0
  744. data/helpers/vendor/symfony/console/Tests/Input/InputOptionTest.php +196 -0
  745. data/helpers/vendor/symfony/console/Tests/Input/InputTest.php +149 -0
  746. data/helpers/vendor/symfony/console/Tests/Input/StringInputTest.php +87 -0
  747. data/helpers/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php +215 -0
  748. data/helpers/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php +42 -0
  749. data/helpers/vendor/symfony/console/Tests/Output/ConsoleSectionOutputTest.php +163 -0
  750. data/helpers/vendor/symfony/console/Tests/Output/NullOutputTest.php +88 -0
  751. data/helpers/vendor/symfony/console/Tests/Output/OutputTest.php +189 -0
  752. data/helpers/vendor/symfony/console/Tests/Output/StreamOutputTest.php +61 -0
  753. data/helpers/vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php +64 -0
  754. data/helpers/vendor/symfony/console/Tests/Question/ConfirmationQuestionTest.php +62 -0
  755. data/helpers/vendor/symfony/console/Tests/Question/QuestionTest.php +304 -0
  756. data/helpers/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php +118 -0
  757. data/helpers/vendor/symfony/console/Tests/TerminalTest.php +59 -0
  758. data/helpers/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php +113 -0
  759. data/helpers/vendor/symfony/console/Tests/Tester/CommandTesterTest.php +235 -0
  760. data/helpers/vendor/symfony/console/composer.json +59 -0
  761. data/helpers/vendor/symfony/console/phpunit.xml.dist +41 -0
  762. data/helpers/vendor/symfony/filesystem/.gitignore +3 -0
  763. data/helpers/vendor/symfony/filesystem/CHANGELOG.md +65 -0
  764. data/helpers/vendor/symfony/filesystem/Exception/ExceptionInterface.php +21 -0
  765. data/helpers/vendor/symfony/filesystem/Exception/FileNotFoundException.php +34 -0
  766. data/helpers/vendor/symfony/filesystem/Exception/IOException.php +39 -0
  767. data/helpers/vendor/symfony/filesystem/Exception/IOExceptionInterface.php +27 -0
  768. data/helpers/vendor/symfony/filesystem/Exception/InvalidArgumentException.php +19 -0
  769. data/helpers/vendor/symfony/filesystem/Filesystem.php +768 -0
  770. data/helpers/vendor/symfony/filesystem/LICENSE +19 -0
  771. data/helpers/vendor/symfony/filesystem/README.md +13 -0
  772. data/helpers/vendor/symfony/filesystem/Tests/ExceptionTest.php +47 -0
  773. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTest.php +1750 -0
  774. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTestCase.php +166 -0
  775. data/helpers/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php +46 -0
  776. data/helpers/vendor/symfony/filesystem/composer.json +34 -0
  777. data/helpers/vendor/symfony/filesystem/phpunit.xml.dist +30 -0
  778. data/helpers/vendor/symfony/finder/.gitignore +3 -0
  779. data/helpers/vendor/symfony/finder/CHANGELOG.md +74 -0
  780. data/helpers/vendor/symfony/finder/Comparator/Comparator.php +98 -0
  781. data/helpers/vendor/symfony/finder/Comparator/DateComparator.php +51 -0
  782. data/helpers/vendor/symfony/finder/Comparator/NumberComparator.php +79 -0
  783. data/helpers/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
  784. data/helpers/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +19 -0
  785. data/helpers/vendor/symfony/finder/Finder.php +811 -0
  786. data/helpers/vendor/symfony/finder/Gitignore.php +107 -0
  787. data/helpers/vendor/symfony/finder/Glob.php +116 -0
  788. data/helpers/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
  789. data/helpers/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
  790. data/helpers/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +45 -0
  791. data/helpers/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +84 -0
  792. data/helpers/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +53 -0
  793. data/helpers/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
  794. data/helpers/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +47 -0
  795. data/helpers/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +112 -0
  796. data/helpers/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
  797. data/helpers/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +140 -0
  798. data/helpers/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
  799. data/helpers/vendor/symfony/finder/Iterator/SortableIterator.php +99 -0
  800. data/helpers/vendor/symfony/finder/LICENSE +19 -0
  801. data/helpers/vendor/symfony/finder/README.md +14 -0
  802. data/helpers/vendor/symfony/finder/SplFileInfo.php +85 -0
  803. data/helpers/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php +65 -0
  804. data/helpers/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php +64 -0
  805. data/helpers/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php +108 -0
  806. data/helpers/vendor/symfony/finder/Tests/FinderTest.php +1459 -0
  807. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/a +0 -0
  808. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon +0 -0
  809. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon +0 -0
  810. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat +0 -0
  811. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat +0 -0
  812. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/a.dat +0 -0
  813. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy +0 -0
  814. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy +0 -0
  815. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy +0 -0
  816. data/helpers/vendor/symfony/finder/Tests/Fixtures/dolor.txt +2 -0
  817. data/helpers/vendor/symfony/finder/Tests/Fixtures/ipsum.txt +2 -0
  818. data/helpers/vendor/symfony/finder/Tests/Fixtures/lorem.txt +2 -0
  819. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/.dot +1 -0
  820. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/a +0 -0
  821. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon +0 -0
  822. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon +0 -0
  823. data/helpers/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat +0 -0
  824. data/helpers/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt b/data/helpers/vendor/symfony/finder/Tests/Fixtures/with → space/foo.txt +0 -0
  825. data/helpers/vendor/symfony/finder/Tests/GitignoreTest.php +118 -0
  826. data/helpers/vendor/symfony/finder/Tests/GlobTest.php +95 -0
  827. data/helpers/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php +46 -0
  828. data/helpers/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php +92 -0
  829. data/helpers/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php +105 -0
  830. data/helpers/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php +110 -0
  831. data/helpers/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php +82 -0
  832. data/helpers/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php +86 -0
  833. data/helpers/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php +54 -0
  834. data/helpers/vendor/symfony/finder/Tests/Iterator/Iterator.php +55 -0
  835. data/helpers/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php +100 -0
  836. data/helpers/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php +21 -0
  837. data/helpers/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php +132 -0
  838. data/helpers/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php +71 -0
  839. data/helpers/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php +82 -0
  840. data/helpers/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php +130 -0
  841. data/helpers/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php +59 -0
  842. data/helpers/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php +70 -0
  843. data/helpers/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php +262 -0
  844. data/helpers/vendor/symfony/finder/composer.json +33 -0
  845. data/helpers/vendor/symfony/finder/phpunit.xml.dist +30 -0
  846. data/helpers/vendor/symfony/polyfill-ctype/Ctype.php +227 -0
  847. data/helpers/vendor/symfony/polyfill-ctype/LICENSE +19 -0
  848. data/helpers/vendor/symfony/polyfill-ctype/README.md +12 -0
  849. data/helpers/vendor/symfony/polyfill-ctype/bootstrap.php +26 -0
  850. data/helpers/vendor/symfony/polyfill-ctype/composer.json +34 -0
  851. data/helpers/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  852. data/helpers/vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
  853. data/helpers/vendor/symfony/polyfill-mbstring/README.md +13 -0
  854. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1096 -0
  855. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  856. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1104 -0
  857. data/helpers/vendor/symfony/polyfill-mbstring/bootstrap.php +58 -0
  858. data/helpers/vendor/symfony/polyfill-mbstring/composer.json +34 -0
  859. data/helpers/vendor/symfony/polyfill-php73/LICENSE +19 -0
  860. data/helpers/vendor/symfony/polyfill-php73/Php73.php +34 -0
  861. data/helpers/vendor/symfony/polyfill-php73/README.md +18 -0
  862. data/helpers/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php +14 -0
  863. data/helpers/vendor/symfony/polyfill-php73/bootstrap.php +31 -0
  864. data/helpers/vendor/symfony/polyfill-php73/composer.json +32 -0
  865. data/helpers/vendor/symfony/process/.gitignore +3 -0
  866. data/helpers/vendor/symfony/process/CHANGELOG.md +90 -0
  867. data/helpers/vendor/symfony/process/Exception/ExceptionInterface.php +21 -0
  868. data/helpers/vendor/symfony/process/Exception/InvalidArgumentException.php +21 -0
  869. data/helpers/vendor/symfony/process/Exception/LogicException.php +21 -0
  870. data/helpers/vendor/symfony/process/Exception/ProcessFailedException.php +54 -0
  871. data/helpers/vendor/symfony/process/Exception/ProcessSignaledException.php +41 -0
  872. data/helpers/vendor/symfony/process/Exception/ProcessTimedOutException.php +69 -0
  873. data/helpers/vendor/symfony/process/Exception/RuntimeException.php +21 -0
  874. data/helpers/vendor/symfony/process/ExecutableFinder.php +88 -0
  875. data/helpers/vendor/symfony/process/InputStream.php +90 -0
  876. data/helpers/vendor/symfony/process/LICENSE +19 -0
  877. data/helpers/vendor/symfony/process/PhpExecutableFinder.php +101 -0
  878. data/helpers/vendor/symfony/process/PhpProcess.php +75 -0
  879. data/helpers/vendor/symfony/process/Pipes/AbstractPipes.php +178 -0
  880. data/helpers/vendor/symfony/process/Pipes/PipesInterface.php +67 -0
  881. data/helpers/vendor/symfony/process/Pipes/UnixPipes.php +153 -0
  882. data/helpers/vendor/symfony/process/Pipes/WindowsPipes.php +191 -0
  883. data/helpers/vendor/symfony/process/Process.php +1653 -0
  884. data/helpers/vendor/symfony/process/ProcessUtils.php +69 -0
  885. data/helpers/vendor/symfony/process/README.md +13 -0
  886. data/helpers/vendor/symfony/process/Tests/ErrorProcessInitiator.php +36 -0
  887. data/helpers/vendor/symfony/process/Tests/ExecutableFinderTest.php +178 -0
  888. data/helpers/vendor/symfony/process/Tests/KillableProcessWithOutput.php +25 -0
  889. data/helpers/vendor/symfony/process/Tests/NonStopableProcess.php +47 -0
  890. data/helpers/vendor/symfony/process/Tests/PhpExecutableFinderTest.php +49 -0
  891. data/helpers/vendor/symfony/process/Tests/PhpProcessTest.php +63 -0
  892. data/helpers/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php +72 -0
  893. data/helpers/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php +137 -0
  894. data/helpers/vendor/symfony/process/Tests/ProcessTest.php +1557 -0
  895. data/helpers/vendor/symfony/process/Tests/SignalListener.php +21 -0
  896. data/helpers/vendor/symfony/process/composer.json +33 -0
  897. data/helpers/vendor/symfony/process/phpunit.xml.dist +30 -0
  898. data/helpers/vendor/symfony/service-contracts/LICENSE +19 -0
  899. data/helpers/vendor/symfony/service-contracts/README.md +9 -0
  900. data/helpers/vendor/symfony/service-contracts/ResetInterface.php +30 -0
  901. data/helpers/vendor/symfony/service-contracts/ServiceLocatorTrait.php +120 -0
  902. data/helpers/vendor/symfony/service-contracts/ServiceProviderInterface.php +36 -0
  903. data/helpers/vendor/symfony/service-contracts/ServiceSubscriberInterface.php +53 -0
  904. data/helpers/vendor/symfony/service-contracts/ServiceSubscriberTrait.php +61 -0
  905. data/helpers/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php +94 -0
  906. data/helpers/vendor/symfony/service-contracts/composer.json +34 -0
  907. metadata +908 -3
@@ -0,0 +1,1653 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Process;
13
+
14
+ use Symfony\Component\Process\Exception\InvalidArgumentException;
15
+ use Symfony\Component\Process\Exception\LogicException;
16
+ use Symfony\Component\Process\Exception\ProcessFailedException;
17
+ use Symfony\Component\Process\Exception\ProcessSignaledException;
18
+ use Symfony\Component\Process\Exception\ProcessTimedOutException;
19
+ use Symfony\Component\Process\Exception\RuntimeException;
20
+ use Symfony\Component\Process\Pipes\PipesInterface;
21
+ use Symfony\Component\Process\Pipes\UnixPipes;
22
+ use Symfony\Component\Process\Pipes\WindowsPipes;
23
+
24
+ /**
25
+ * Process is a thin wrapper around proc_* functions to easily
26
+ * start independent PHP processes.
27
+ *
28
+ * @author Fabien Potencier <fabien@symfony.com>
29
+ * @author Romain Neutron <imprec@gmail.com>
30
+ */
31
+ class Process implements \IteratorAggregate
32
+ {
33
+ const ERR = 'err';
34
+ const OUT = 'out';
35
+
36
+ const STATUS_READY = 'ready';
37
+ const STATUS_STARTED = 'started';
38
+ const STATUS_TERMINATED = 'terminated';
39
+
40
+ const STDIN = 0;
41
+ const STDOUT = 1;
42
+ const STDERR = 2;
43
+
44
+ // Timeout Precision in seconds.
45
+ const TIMEOUT_PRECISION = 0.2;
46
+
47
+ const ITER_NON_BLOCKING = 1; // By default, iterating over outputs is a blocking call, use this flag to make it non-blocking
48
+ const ITER_KEEP_OUTPUT = 2; // By default, outputs are cleared while iterating, use this flag to keep them in memory
49
+ const ITER_SKIP_OUT = 4; // Use this flag to skip STDOUT while iterating
50
+ const ITER_SKIP_ERR = 8; // Use this flag to skip STDERR while iterating
51
+
52
+ private $callback;
53
+ private $hasCallback = false;
54
+ private $commandline;
55
+ private $cwd;
56
+ private $env;
57
+ private $input;
58
+ private $starttime;
59
+ private $lastOutputTime;
60
+ private $timeout;
61
+ private $idleTimeout;
62
+ private $exitcode;
63
+ private $fallbackStatus = [];
64
+ private $processInformation;
65
+ private $outputDisabled = false;
66
+ private $stdout;
67
+ private $stderr;
68
+ private $process;
69
+ private $status = self::STATUS_READY;
70
+ private $incrementalOutputOffset = 0;
71
+ private $incrementalErrorOutputOffset = 0;
72
+ private $tty;
73
+ private $pty;
74
+
75
+ private $useFileHandles = false;
76
+ /** @var PipesInterface */
77
+ private $processPipes;
78
+
79
+ private $latestSignal;
80
+
81
+ private static $sigchild;
82
+
83
+ /**
84
+ * Exit codes translation table.
85
+ *
86
+ * User-defined errors must use exit codes in the 64-113 range.
87
+ */
88
+ public static $exitCodes = [
89
+ 0 => 'OK',
90
+ 1 => 'General error',
91
+ 2 => 'Misuse of shell builtins',
92
+
93
+ 126 => 'Invoked command cannot execute',
94
+ 127 => 'Command not found',
95
+ 128 => 'Invalid exit argument',
96
+
97
+ // signals
98
+ 129 => 'Hangup',
99
+ 130 => 'Interrupt',
100
+ 131 => 'Quit and dump core',
101
+ 132 => 'Illegal instruction',
102
+ 133 => 'Trace/breakpoint trap',
103
+ 134 => 'Process aborted',
104
+ 135 => 'Bus error: "access to undefined portion of memory object"',
105
+ 136 => 'Floating point exception: "erroneous arithmetic operation"',
106
+ 137 => 'Kill (terminate immediately)',
107
+ 138 => 'User-defined 1',
108
+ 139 => 'Segmentation violation',
109
+ 140 => 'User-defined 2',
110
+ 141 => 'Write to pipe with no one reading',
111
+ 142 => 'Signal raised by alarm',
112
+ 143 => 'Termination (request to terminate)',
113
+ // 144 - not defined
114
+ 145 => 'Child process terminated, stopped (or continued*)',
115
+ 146 => 'Continue if stopped',
116
+ 147 => 'Stop executing temporarily',
117
+ 148 => 'Terminal stop signal',
118
+ 149 => 'Background process attempting to read from tty ("in")',
119
+ 150 => 'Background process attempting to write to tty ("out")',
120
+ 151 => 'Urgent data available on socket',
121
+ 152 => 'CPU time limit exceeded',
122
+ 153 => 'File size limit exceeded',
123
+ 154 => 'Signal raised by timer counting virtual time: "virtual timer expired"',
124
+ 155 => 'Profiling timer expired',
125
+ // 156 - not defined
126
+ 157 => 'Pollable event',
127
+ // 158 - not defined
128
+ 159 => 'Bad syscall',
129
+ ];
130
+
131
+ /**
132
+ * @param array $command The command to run and its arguments listed as separate entries
133
+ * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
134
+ * @param array|null $env The environment variables or null to use the same environment as the current PHP process
135
+ * @param mixed|null $input The input as stream resource, scalar or \Traversable, or null for no input
136
+ * @param int|float|null $timeout The timeout in seconds or null to disable
137
+ *
138
+ * @throws RuntimeException When proc_open is not installed
139
+ */
140
+ public function __construct($command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
141
+ {
142
+ if (!\function_exists('proc_open')) {
143
+ throw new LogicException('The Process class relies on proc_open, which is not available on your PHP installation.');
144
+ }
145
+
146
+ if (!\is_array($command)) {
147
+ @trigger_error(sprintf('Passing a command as string when creating a "%s" instance is deprecated since Symfony 4.2, pass it as an array of its arguments instead, or use the "Process::fromShellCommandline()" constructor if you need features provided by the shell.', __CLASS__), E_USER_DEPRECATED);
148
+ }
149
+
150
+ $this->commandline = $command;
151
+ $this->cwd = $cwd;
152
+
153
+ // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
154
+ // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
155
+ // @see : https://bugs.php.net/bug.php?id=51800
156
+ // @see : https://bugs.php.net/bug.php?id=50524
157
+ if (null === $this->cwd && (\defined('ZEND_THREAD_SAFE') || '\\' === \DIRECTORY_SEPARATOR)) {
158
+ $this->cwd = getcwd();
159
+ }
160
+ if (null !== $env) {
161
+ $this->setEnv($env);
162
+ }
163
+
164
+ $this->setInput($input);
165
+ $this->setTimeout($timeout);
166
+ $this->useFileHandles = '\\' === \DIRECTORY_SEPARATOR;
167
+ $this->pty = false;
168
+ }
169
+
170
+ /**
171
+ * Creates a Process instance as a command-line to be run in a shell wrapper.
172
+ *
173
+ * Command-lines are parsed by the shell of your OS (/bin/sh on Unix-like, cmd.exe on Windows.)
174
+ * This allows using e.g. pipes or conditional execution. In this mode, signals are sent to the
175
+ * shell wrapper and not to your commands.
176
+ *
177
+ * In order to inject dynamic values into command-lines, we strongly recommend using placeholders.
178
+ * This will save escaping values, which is not portable nor secure anyway:
179
+ *
180
+ * $process = Process::fromShellCommandline('my_command "$MY_VAR"');
181
+ * $process->run(null, ['MY_VAR' => $theValue]);
182
+ *
183
+ * @param string $command The command line to pass to the shell of the OS
184
+ * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
185
+ * @param array|null $env The environment variables or null to use the same environment as the current PHP process
186
+ * @param mixed|null $input The input as stream resource, scalar or \Traversable, or null for no input
187
+ * @param int|float|null $timeout The timeout in seconds or null to disable
188
+ *
189
+ * @throws RuntimeException When proc_open is not installed
190
+ */
191
+ public static function fromShellCommandline(string $command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
192
+ {
193
+ $process = new static([], $cwd, $env, $input, $timeout);
194
+ $process->commandline = $command;
195
+
196
+ return $process;
197
+ }
198
+
199
+ public function __destruct()
200
+ {
201
+ $this->stop(0);
202
+ }
203
+
204
+ public function __clone()
205
+ {
206
+ $this->resetProcessData();
207
+ }
208
+
209
+ /**
210
+ * Runs the process.
211
+ *
212
+ * The callback receives the type of output (out or err) and
213
+ * some bytes from the output in real-time. It allows to have feedback
214
+ * from the independent process during execution.
215
+ *
216
+ * The STDOUT and STDERR are also available after the process is finished
217
+ * via the getOutput() and getErrorOutput() methods.
218
+ *
219
+ * @param callable|null $callback A PHP callback to run whenever there is some
220
+ * output available on STDOUT or STDERR
221
+ * @param array $env An array of additional env vars to set when running the process
222
+ *
223
+ * @return int The exit status code
224
+ *
225
+ * @throws RuntimeException When process can't be launched
226
+ * @throws RuntimeException When process stopped after receiving signal
227
+ * @throws LogicException In case a callback is provided and output has been disabled
228
+ *
229
+ * @final
230
+ */
231
+ public function run(callable $callback = null, array $env = []): int
232
+ {
233
+ $this->start($callback, $env);
234
+
235
+ return $this->wait();
236
+ }
237
+
238
+ /**
239
+ * Runs the process.
240
+ *
241
+ * This is identical to run() except that an exception is thrown if the process
242
+ * exits with a non-zero exit code.
243
+ *
244
+ * @param callable|null $callback
245
+ * @param array $env An array of additional env vars to set when running the process
246
+ *
247
+ * @return self
248
+ *
249
+ * @throws ProcessFailedException if the process didn't terminate successfully
250
+ *
251
+ * @final
252
+ */
253
+ public function mustRun(callable $callback = null, array $env = [])
254
+ {
255
+ if (0 !== $this->run($callback, $env)) {
256
+ throw new ProcessFailedException($this);
257
+ }
258
+
259
+ return $this;
260
+ }
261
+
262
+ /**
263
+ * Starts the process and returns after writing the input to STDIN.
264
+ *
265
+ * This method blocks until all STDIN data is sent to the process then it
266
+ * returns while the process runs in the background.
267
+ *
268
+ * The termination of the process can be awaited with wait().
269
+ *
270
+ * The callback receives the type of output (out or err) and some bytes from
271
+ * the output in real-time while writing the standard input to the process.
272
+ * It allows to have feedback from the independent process during execution.
273
+ *
274
+ * @param callable|null $callback A PHP callback to run whenever there is some
275
+ * output available on STDOUT or STDERR
276
+ * @param array $env An array of additional env vars to set when running the process
277
+ *
278
+ * @throws RuntimeException When process can't be launched
279
+ * @throws RuntimeException When process is already running
280
+ * @throws LogicException In case a callback is provided and output has been disabled
281
+ */
282
+ public function start(callable $callback = null, array $env = [])
283
+ {
284
+ if ($this->isRunning()) {
285
+ throw new RuntimeException('Process is already running');
286
+ }
287
+
288
+ $this->resetProcessData();
289
+ $this->starttime = $this->lastOutputTime = microtime(true);
290
+ $this->callback = $this->buildCallback($callback);
291
+ $this->hasCallback = null !== $callback;
292
+ $descriptors = $this->getDescriptors();
293
+
294
+ if (\is_array($commandline = $this->commandline)) {
295
+ $commandline = implode(' ', array_map([$this, 'escapeArgument'], $commandline));
296
+
297
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
298
+ // exec is mandatory to deal with sending a signal to the process
299
+ $commandline = 'exec '.$commandline;
300
+ }
301
+ }
302
+
303
+ if ($this->env) {
304
+ $env += $this->env;
305
+ }
306
+ $env += $this->getDefaultEnv();
307
+
308
+ $options = ['suppress_errors' => true];
309
+
310
+ if ('\\' === \DIRECTORY_SEPARATOR) {
311
+ $options['bypass_shell'] = true;
312
+ $commandline = $this->prepareWindowsCommandLine($commandline, $env);
313
+ } elseif (!$this->useFileHandles && $this->isSigchildEnabled()) {
314
+ // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
315
+ $descriptors[3] = ['pipe', 'w'];
316
+
317
+ // See https://unix.stackexchange.com/questions/71205/background-process-pipe-input
318
+ $commandline = '{ ('.$commandline.') <&3 3<&- 3>/dev/null & } 3<&0;';
319
+ $commandline .= 'pid=$!; echo $pid >&3; wait $pid; code=$?; echo $code >&3; exit $code';
320
+
321
+ // Workaround for the bug, when PTS functionality is enabled.
322
+ // @see : https://bugs.php.net/69442
323
+ $ptsWorkaround = fopen(__FILE__, 'r');
324
+ }
325
+
326
+ $envPairs = [];
327
+ foreach ($env as $k => $v) {
328
+ if (false !== $v) {
329
+ $envPairs[] = $k.'='.$v;
330
+ }
331
+ }
332
+
333
+ if (!is_dir($this->cwd)) {
334
+ throw new RuntimeException(sprintf('The provided cwd "%s" does not exist.', $this->cwd));
335
+ }
336
+
337
+ $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $options);
338
+
339
+ if (!\is_resource($this->process)) {
340
+ throw new RuntimeException('Unable to launch a new process.');
341
+ }
342
+ $this->status = self::STATUS_STARTED;
343
+
344
+ if (isset($descriptors[3])) {
345
+ $this->fallbackStatus['pid'] = (int) fgets($this->processPipes->pipes[3]);
346
+ }
347
+
348
+ if ($this->tty) {
349
+ return;
350
+ }
351
+
352
+ $this->updateStatus(false);
353
+ $this->checkTimeout();
354
+ }
355
+
356
+ /**
357
+ * Restarts the process.
358
+ *
359
+ * Be warned that the process is cloned before being started.
360
+ *
361
+ * @param callable|null $callback A PHP callback to run whenever there is some
362
+ * output available on STDOUT or STDERR
363
+ * @param array $env An array of additional env vars to set when running the process
364
+ *
365
+ * @return $this
366
+ *
367
+ * @throws RuntimeException When process can't be launched
368
+ * @throws RuntimeException When process is already running
369
+ *
370
+ * @see start()
371
+ *
372
+ * @final
373
+ */
374
+ public function restart(callable $callback = null, array $env = [])
375
+ {
376
+ if ($this->isRunning()) {
377
+ throw new RuntimeException('Process is already running');
378
+ }
379
+
380
+ $process = clone $this;
381
+ $process->start($callback, $env);
382
+
383
+ return $process;
384
+ }
385
+
386
+ /**
387
+ * Waits for the process to terminate.
388
+ *
389
+ * The callback receives the type of output (out or err) and some bytes
390
+ * from the output in real-time while writing the standard input to the process.
391
+ * It allows to have feedback from the independent process during execution.
392
+ *
393
+ * @param callable|null $callback A valid PHP callback
394
+ *
395
+ * @return int The exitcode of the process
396
+ *
397
+ * @throws RuntimeException When process timed out
398
+ * @throws RuntimeException When process stopped after receiving signal
399
+ * @throws LogicException When process is not yet started
400
+ */
401
+ public function wait(callable $callback = null)
402
+ {
403
+ $this->requireProcessIsStarted(__FUNCTION__);
404
+
405
+ $this->updateStatus(false);
406
+
407
+ if (null !== $callback) {
408
+ if (!$this->processPipes->haveReadSupport()) {
409
+ $this->stop(0);
410
+ throw new \LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::wait"');
411
+ }
412
+ $this->callback = $this->buildCallback($callback);
413
+ }
414
+
415
+ do {
416
+ $this->checkTimeout();
417
+ $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
418
+ $this->readPipes($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
419
+ } while ($running);
420
+
421
+ while ($this->isRunning()) {
422
+ $this->checkTimeout();
423
+ usleep(1000);
424
+ }
425
+
426
+ if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
427
+ throw new ProcessSignaledException($this);
428
+ }
429
+
430
+ return $this->exitcode;
431
+ }
432
+
433
+ /**
434
+ * Waits until the callback returns true.
435
+ *
436
+ * The callback receives the type of output (out or err) and some bytes
437
+ * from the output in real-time while writing the standard input to the process.
438
+ * It allows to have feedback from the independent process during execution.
439
+ *
440
+ * @throws RuntimeException When process timed out
441
+ * @throws LogicException When process is not yet started
442
+ */
443
+ public function waitUntil(callable $callback): bool
444
+ {
445
+ $this->requireProcessIsStarted(__FUNCTION__);
446
+ $this->updateStatus(false);
447
+
448
+ if (!$this->processPipes->haveReadSupport()) {
449
+ $this->stop(0);
450
+ throw new \LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::waitUntil".');
451
+ }
452
+ $callback = $this->buildCallback($callback);
453
+
454
+ $ready = false;
455
+ while (true) {
456
+ $this->checkTimeout();
457
+ $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
458
+ $output = $this->processPipes->readAndWrite($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
459
+
460
+ foreach ($output as $type => $data) {
461
+ if (3 !== $type) {
462
+ $ready = $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data) || $ready;
463
+ } elseif (!isset($this->fallbackStatus['signaled'])) {
464
+ $this->fallbackStatus['exitcode'] = (int) $data;
465
+ }
466
+ }
467
+ if ($ready) {
468
+ return true;
469
+ }
470
+ if (!$running) {
471
+ return false;
472
+ }
473
+
474
+ usleep(1000);
475
+ }
476
+ }
477
+
478
+ /**
479
+ * Returns the Pid (process identifier), if applicable.
480
+ *
481
+ * @return int|null The process id if running, null otherwise
482
+ */
483
+ public function getPid()
484
+ {
485
+ return $this->isRunning() ? $this->processInformation['pid'] : null;
486
+ }
487
+
488
+ /**
489
+ * Sends a POSIX signal to the process.
490
+ *
491
+ * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
492
+ *
493
+ * @return $this
494
+ *
495
+ * @throws LogicException In case the process is not running
496
+ * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
497
+ * @throws RuntimeException In case of failure
498
+ */
499
+ public function signal($signal)
500
+ {
501
+ $this->doSignal($signal, true);
502
+
503
+ return $this;
504
+ }
505
+
506
+ /**
507
+ * Disables fetching output and error output from the underlying process.
508
+ *
509
+ * @return $this
510
+ *
511
+ * @throws RuntimeException In case the process is already running
512
+ * @throws LogicException if an idle timeout is set
513
+ */
514
+ public function disableOutput()
515
+ {
516
+ if ($this->isRunning()) {
517
+ throw new RuntimeException('Disabling output while the process is running is not possible.');
518
+ }
519
+ if (null !== $this->idleTimeout) {
520
+ throw new LogicException('Output can not be disabled while an idle timeout is set.');
521
+ }
522
+
523
+ $this->outputDisabled = true;
524
+
525
+ return $this;
526
+ }
527
+
528
+ /**
529
+ * Enables fetching output and error output from the underlying process.
530
+ *
531
+ * @return $this
532
+ *
533
+ * @throws RuntimeException In case the process is already running
534
+ */
535
+ public function enableOutput()
536
+ {
537
+ if ($this->isRunning()) {
538
+ throw new RuntimeException('Enabling output while the process is running is not possible.');
539
+ }
540
+
541
+ $this->outputDisabled = false;
542
+
543
+ return $this;
544
+ }
545
+
546
+ /**
547
+ * Returns true in case the output is disabled, false otherwise.
548
+ *
549
+ * @return bool
550
+ */
551
+ public function isOutputDisabled()
552
+ {
553
+ return $this->outputDisabled;
554
+ }
555
+
556
+ /**
557
+ * Returns the current output of the process (STDOUT).
558
+ *
559
+ * @return string The process output
560
+ *
561
+ * @throws LogicException in case the output has been disabled
562
+ * @throws LogicException In case the process is not started
563
+ */
564
+ public function getOutput()
565
+ {
566
+ $this->readPipesForOutput(__FUNCTION__);
567
+
568
+ if (false === $ret = stream_get_contents($this->stdout, -1, 0)) {
569
+ return '';
570
+ }
571
+
572
+ return $ret;
573
+ }
574
+
575
+ /**
576
+ * Returns the output incrementally.
577
+ *
578
+ * In comparison with the getOutput method which always return the whole
579
+ * output, this one returns the new output since the last call.
580
+ *
581
+ * @return string The process output since the last call
582
+ *
583
+ * @throws LogicException in case the output has been disabled
584
+ * @throws LogicException In case the process is not started
585
+ */
586
+ public function getIncrementalOutput()
587
+ {
588
+ $this->readPipesForOutput(__FUNCTION__);
589
+
590
+ $latest = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
591
+ $this->incrementalOutputOffset = ftell($this->stdout);
592
+
593
+ if (false === $latest) {
594
+ return '';
595
+ }
596
+
597
+ return $latest;
598
+ }
599
+
600
+ /**
601
+ * Returns an iterator to the output of the process, with the output type as keys (Process::OUT/ERR).
602
+ *
603
+ * @param int $flags A bit field of Process::ITER_* flags
604
+ *
605
+ * @throws LogicException in case the output has been disabled
606
+ * @throws LogicException In case the process is not started
607
+ *
608
+ * @return \Generator
609
+ */
610
+ public function getIterator($flags = 0)
611
+ {
612
+ $this->readPipesForOutput(__FUNCTION__, false);
613
+
614
+ $clearOutput = !(self::ITER_KEEP_OUTPUT & $flags);
615
+ $blocking = !(self::ITER_NON_BLOCKING & $flags);
616
+ $yieldOut = !(self::ITER_SKIP_OUT & $flags);
617
+ $yieldErr = !(self::ITER_SKIP_ERR & $flags);
618
+
619
+ while (null !== $this->callback || ($yieldOut && !feof($this->stdout)) || ($yieldErr && !feof($this->stderr))) {
620
+ if ($yieldOut) {
621
+ $out = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
622
+
623
+ if (isset($out[0])) {
624
+ if ($clearOutput) {
625
+ $this->clearOutput();
626
+ } else {
627
+ $this->incrementalOutputOffset = ftell($this->stdout);
628
+ }
629
+
630
+ yield self::OUT => $out;
631
+ }
632
+ }
633
+
634
+ if ($yieldErr) {
635
+ $err = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
636
+
637
+ if (isset($err[0])) {
638
+ if ($clearOutput) {
639
+ $this->clearErrorOutput();
640
+ } else {
641
+ $this->incrementalErrorOutputOffset = ftell($this->stderr);
642
+ }
643
+
644
+ yield self::ERR => $err;
645
+ }
646
+ }
647
+
648
+ if (!$blocking && !isset($out[0]) && !isset($err[0])) {
649
+ yield self::OUT => '';
650
+ }
651
+
652
+ $this->checkTimeout();
653
+ $this->readPipesForOutput(__FUNCTION__, $blocking);
654
+ }
655
+ }
656
+
657
+ /**
658
+ * Clears the process output.
659
+ *
660
+ * @return $this
661
+ */
662
+ public function clearOutput()
663
+ {
664
+ ftruncate($this->stdout, 0);
665
+ fseek($this->stdout, 0);
666
+ $this->incrementalOutputOffset = 0;
667
+
668
+ return $this;
669
+ }
670
+
671
+ /**
672
+ * Returns the current error output of the process (STDERR).
673
+ *
674
+ * @return string The process error output
675
+ *
676
+ * @throws LogicException in case the output has been disabled
677
+ * @throws LogicException In case the process is not started
678
+ */
679
+ public function getErrorOutput()
680
+ {
681
+ $this->readPipesForOutput(__FUNCTION__);
682
+
683
+ if (false === $ret = stream_get_contents($this->stderr, -1, 0)) {
684
+ return '';
685
+ }
686
+
687
+ return $ret;
688
+ }
689
+
690
+ /**
691
+ * Returns the errorOutput incrementally.
692
+ *
693
+ * In comparison with the getErrorOutput method which always return the
694
+ * whole error output, this one returns the new error output since the last
695
+ * call.
696
+ *
697
+ * @return string The process error output since the last call
698
+ *
699
+ * @throws LogicException in case the output has been disabled
700
+ * @throws LogicException In case the process is not started
701
+ */
702
+ public function getIncrementalErrorOutput()
703
+ {
704
+ $this->readPipesForOutput(__FUNCTION__);
705
+
706
+ $latest = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
707
+ $this->incrementalErrorOutputOffset = ftell($this->stderr);
708
+
709
+ if (false === $latest) {
710
+ return '';
711
+ }
712
+
713
+ return $latest;
714
+ }
715
+
716
+ /**
717
+ * Clears the process output.
718
+ *
719
+ * @return $this
720
+ */
721
+ public function clearErrorOutput()
722
+ {
723
+ ftruncate($this->stderr, 0);
724
+ fseek($this->stderr, 0);
725
+ $this->incrementalErrorOutputOffset = 0;
726
+
727
+ return $this;
728
+ }
729
+
730
+ /**
731
+ * Returns the exit code returned by the process.
732
+ *
733
+ * @return int|null The exit status code, null if the Process is not terminated
734
+ */
735
+ public function getExitCode()
736
+ {
737
+ $this->updateStatus(false);
738
+
739
+ return $this->exitcode;
740
+ }
741
+
742
+ /**
743
+ * Returns a string representation for the exit code returned by the process.
744
+ *
745
+ * This method relies on the Unix exit code status standardization
746
+ * and might not be relevant for other operating systems.
747
+ *
748
+ * @return string|null A string representation for the exit status code, null if the Process is not terminated
749
+ *
750
+ * @see http://tldp.org/LDP/abs/html/exitcodes.html
751
+ * @see http://en.wikipedia.org/wiki/Unix_signal
752
+ */
753
+ public function getExitCodeText()
754
+ {
755
+ if (null === $exitcode = $this->getExitCode()) {
756
+ return;
757
+ }
758
+
759
+ return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error';
760
+ }
761
+
762
+ /**
763
+ * Checks if the process ended successfully.
764
+ *
765
+ * @return bool true if the process ended successfully, false otherwise
766
+ */
767
+ public function isSuccessful()
768
+ {
769
+ return 0 === $this->getExitCode();
770
+ }
771
+
772
+ /**
773
+ * Returns true if the child process has been terminated by an uncaught signal.
774
+ *
775
+ * It always returns false on Windows.
776
+ *
777
+ * @return bool
778
+ *
779
+ * @throws LogicException In case the process is not terminated
780
+ */
781
+ public function hasBeenSignaled()
782
+ {
783
+ $this->requireProcessIsTerminated(__FUNCTION__);
784
+
785
+ return $this->processInformation['signaled'];
786
+ }
787
+
788
+ /**
789
+ * Returns the number of the signal that caused the child process to terminate its execution.
790
+ *
791
+ * It is only meaningful if hasBeenSignaled() returns true.
792
+ *
793
+ * @return int
794
+ *
795
+ * @throws RuntimeException In case --enable-sigchild is activated
796
+ * @throws LogicException In case the process is not terminated
797
+ */
798
+ public function getTermSignal()
799
+ {
800
+ $this->requireProcessIsTerminated(__FUNCTION__);
801
+
802
+ if ($this->isSigchildEnabled() && -1 === $this->processInformation['termsig']) {
803
+ throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.');
804
+ }
805
+
806
+ return $this->processInformation['termsig'];
807
+ }
808
+
809
+ /**
810
+ * Returns true if the child process has been stopped by a signal.
811
+ *
812
+ * It always returns false on Windows.
813
+ *
814
+ * @return bool
815
+ *
816
+ * @throws LogicException In case the process is not terminated
817
+ */
818
+ public function hasBeenStopped()
819
+ {
820
+ $this->requireProcessIsTerminated(__FUNCTION__);
821
+
822
+ return $this->processInformation['stopped'];
823
+ }
824
+
825
+ /**
826
+ * Returns the number of the signal that caused the child process to stop its execution.
827
+ *
828
+ * It is only meaningful if hasBeenStopped() returns true.
829
+ *
830
+ * @return int
831
+ *
832
+ * @throws LogicException In case the process is not terminated
833
+ */
834
+ public function getStopSignal()
835
+ {
836
+ $this->requireProcessIsTerminated(__FUNCTION__);
837
+
838
+ return $this->processInformation['stopsig'];
839
+ }
840
+
841
+ /**
842
+ * Checks if the process is currently running.
843
+ *
844
+ * @return bool true if the process is currently running, false otherwise
845
+ */
846
+ public function isRunning()
847
+ {
848
+ if (self::STATUS_STARTED !== $this->status) {
849
+ return false;
850
+ }
851
+
852
+ $this->updateStatus(false);
853
+
854
+ return $this->processInformation['running'];
855
+ }
856
+
857
+ /**
858
+ * Checks if the process has been started with no regard to the current state.
859
+ *
860
+ * @return bool true if status is ready, false otherwise
861
+ */
862
+ public function isStarted()
863
+ {
864
+ return self::STATUS_READY != $this->status;
865
+ }
866
+
867
+ /**
868
+ * Checks if the process is terminated.
869
+ *
870
+ * @return bool true if process is terminated, false otherwise
871
+ */
872
+ public function isTerminated()
873
+ {
874
+ $this->updateStatus(false);
875
+
876
+ return self::STATUS_TERMINATED == $this->status;
877
+ }
878
+
879
+ /**
880
+ * Gets the process status.
881
+ *
882
+ * The status is one of: ready, started, terminated.
883
+ *
884
+ * @return string The current process status
885
+ */
886
+ public function getStatus()
887
+ {
888
+ $this->updateStatus(false);
889
+
890
+ return $this->status;
891
+ }
892
+
893
+ /**
894
+ * Stops the process.
895
+ *
896
+ * @param int|float $timeout The timeout in seconds
897
+ * @param int $signal A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9)
898
+ *
899
+ * @return int The exit-code of the process
900
+ */
901
+ public function stop($timeout = 10, $signal = null)
902
+ {
903
+ $timeoutMicro = microtime(true) + $timeout;
904
+ if ($this->isRunning()) {
905
+ // given SIGTERM may not be defined and that "proc_terminate" uses the constant value and not the constant itself, we use the same here
906
+ $this->doSignal(15, false);
907
+ do {
908
+ usleep(1000);
909
+ } while ($this->isRunning() && microtime(true) < $timeoutMicro);
910
+
911
+ if ($this->isRunning()) {
912
+ // Avoid exception here: process is supposed to be running, but it might have stopped just
913
+ // after this line. In any case, let's silently discard the error, we cannot do anything.
914
+ $this->doSignal($signal ?: 9, false);
915
+ }
916
+ }
917
+
918
+ if ($this->isRunning()) {
919
+ if (isset($this->fallbackStatus['pid'])) {
920
+ unset($this->fallbackStatus['pid']);
921
+
922
+ return $this->stop(0, $signal);
923
+ }
924
+ $this->close();
925
+ }
926
+
927
+ return $this->exitcode;
928
+ }
929
+
930
+ /**
931
+ * Adds a line to the STDOUT stream.
932
+ *
933
+ * @internal
934
+ */
935
+ public function addOutput(string $line)
936
+ {
937
+ $this->lastOutputTime = microtime(true);
938
+
939
+ fseek($this->stdout, 0, SEEK_END);
940
+ fwrite($this->stdout, $line);
941
+ fseek($this->stdout, $this->incrementalOutputOffset);
942
+ }
943
+
944
+ /**
945
+ * Adds a line to the STDERR stream.
946
+ *
947
+ * @internal
948
+ */
949
+ public function addErrorOutput(string $line)
950
+ {
951
+ $this->lastOutputTime = microtime(true);
952
+
953
+ fseek($this->stderr, 0, SEEK_END);
954
+ fwrite($this->stderr, $line);
955
+ fseek($this->stderr, $this->incrementalErrorOutputOffset);
956
+ }
957
+
958
+ /**
959
+ * Gets the command line to be executed.
960
+ *
961
+ * @return string The command to execute
962
+ */
963
+ public function getCommandLine()
964
+ {
965
+ return \is_array($this->commandline) ? implode(' ', array_map([$this, 'escapeArgument'], $this->commandline)) : $this->commandline;
966
+ }
967
+
968
+ /**
969
+ * Sets the command line to be executed.
970
+ *
971
+ * @param string|array $commandline The command to execute
972
+ *
973
+ * @return self The current Process instance
974
+ *
975
+ * @deprecated since Symfony 4.2.
976
+ */
977
+ public function setCommandLine($commandline)
978
+ {
979
+ @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
980
+
981
+ $this->commandline = $commandline;
982
+
983
+ return $this;
984
+ }
985
+
986
+ /**
987
+ * Gets the process timeout (max. runtime).
988
+ *
989
+ * @return float|null The timeout in seconds or null if it's disabled
990
+ */
991
+ public function getTimeout()
992
+ {
993
+ return $this->timeout;
994
+ }
995
+
996
+ /**
997
+ * Gets the process idle timeout (max. time since last output).
998
+ *
999
+ * @return float|null The timeout in seconds or null if it's disabled
1000
+ */
1001
+ public function getIdleTimeout()
1002
+ {
1003
+ return $this->idleTimeout;
1004
+ }
1005
+
1006
+ /**
1007
+ * Sets the process timeout (max. runtime).
1008
+ *
1009
+ * To disable the timeout, set this value to null.
1010
+ *
1011
+ * @param int|float|null $timeout The timeout in seconds
1012
+ *
1013
+ * @return self The current Process instance
1014
+ *
1015
+ * @throws InvalidArgumentException if the timeout is negative
1016
+ */
1017
+ public function setTimeout($timeout)
1018
+ {
1019
+ $this->timeout = $this->validateTimeout($timeout);
1020
+
1021
+ return $this;
1022
+ }
1023
+
1024
+ /**
1025
+ * Sets the process idle timeout (max. time since last output).
1026
+ *
1027
+ * To disable the timeout, set this value to null.
1028
+ *
1029
+ * @param int|float|null $timeout The timeout in seconds
1030
+ *
1031
+ * @return self The current Process instance
1032
+ *
1033
+ * @throws LogicException if the output is disabled
1034
+ * @throws InvalidArgumentException if the timeout is negative
1035
+ */
1036
+ public function setIdleTimeout($timeout)
1037
+ {
1038
+ if (null !== $timeout && $this->outputDisabled) {
1039
+ throw new LogicException('Idle timeout can not be set while the output is disabled.');
1040
+ }
1041
+
1042
+ $this->idleTimeout = $this->validateTimeout($timeout);
1043
+
1044
+ return $this;
1045
+ }
1046
+
1047
+ /**
1048
+ * Enables or disables the TTY mode.
1049
+ *
1050
+ * @param bool $tty True to enabled and false to disable
1051
+ *
1052
+ * @return self The current Process instance
1053
+ *
1054
+ * @throws RuntimeException In case the TTY mode is not supported
1055
+ */
1056
+ public function setTty($tty)
1057
+ {
1058
+ if ('\\' === \DIRECTORY_SEPARATOR && $tty) {
1059
+ throw new RuntimeException('TTY mode is not supported on Windows platform.');
1060
+ }
1061
+
1062
+ if ($tty && !self::isTtySupported()) {
1063
+ throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.');
1064
+ }
1065
+
1066
+ $this->tty = (bool) $tty;
1067
+
1068
+ return $this;
1069
+ }
1070
+
1071
+ /**
1072
+ * Checks if the TTY mode is enabled.
1073
+ *
1074
+ * @return bool true if the TTY mode is enabled, false otherwise
1075
+ */
1076
+ public function isTty()
1077
+ {
1078
+ return $this->tty;
1079
+ }
1080
+
1081
+ /**
1082
+ * Sets PTY mode.
1083
+ *
1084
+ * @param bool $bool
1085
+ *
1086
+ * @return self
1087
+ */
1088
+ public function setPty($bool)
1089
+ {
1090
+ $this->pty = (bool) $bool;
1091
+
1092
+ return $this;
1093
+ }
1094
+
1095
+ /**
1096
+ * Returns PTY state.
1097
+ *
1098
+ * @return bool
1099
+ */
1100
+ public function isPty()
1101
+ {
1102
+ return $this->pty;
1103
+ }
1104
+
1105
+ /**
1106
+ * Gets the working directory.
1107
+ *
1108
+ * @return string|null The current working directory or null on failure
1109
+ */
1110
+ public function getWorkingDirectory()
1111
+ {
1112
+ if (null === $this->cwd) {
1113
+ // getcwd() will return false if any one of the parent directories does not have
1114
+ // the readable or search mode set, even if the current directory does
1115
+ return getcwd() ?: null;
1116
+ }
1117
+
1118
+ return $this->cwd;
1119
+ }
1120
+
1121
+ /**
1122
+ * Sets the current working directory.
1123
+ *
1124
+ * @param string $cwd The new working directory
1125
+ *
1126
+ * @return self The current Process instance
1127
+ */
1128
+ public function setWorkingDirectory($cwd)
1129
+ {
1130
+ $this->cwd = $cwd;
1131
+
1132
+ return $this;
1133
+ }
1134
+
1135
+ /**
1136
+ * Gets the environment variables.
1137
+ *
1138
+ * @return array The current environment variables
1139
+ */
1140
+ public function getEnv()
1141
+ {
1142
+ return $this->env;
1143
+ }
1144
+
1145
+ /**
1146
+ * Sets the environment variables.
1147
+ *
1148
+ * Each environment variable value should be a string.
1149
+ * If it is an array, the variable is ignored.
1150
+ * If it is false or null, it will be removed when
1151
+ * env vars are otherwise inherited.
1152
+ *
1153
+ * That happens in PHP when 'argv' is registered into
1154
+ * the $_ENV array for instance.
1155
+ *
1156
+ * @param array $env The new environment variables
1157
+ *
1158
+ * @return self The current Process instance
1159
+ */
1160
+ public function setEnv(array $env)
1161
+ {
1162
+ // Process can not handle env values that are arrays
1163
+ $env = array_filter($env, function ($value) {
1164
+ return !\is_array($value);
1165
+ });
1166
+
1167
+ $this->env = $env;
1168
+
1169
+ return $this;
1170
+ }
1171
+
1172
+ /**
1173
+ * Gets the Process input.
1174
+ *
1175
+ * @return resource|string|\Iterator|null The Process input
1176
+ */
1177
+ public function getInput()
1178
+ {
1179
+ return $this->input;
1180
+ }
1181
+
1182
+ /**
1183
+ * Sets the input.
1184
+ *
1185
+ * This content will be passed to the underlying process standard input.
1186
+ *
1187
+ * @param string|int|float|bool|resource|\Traversable|null $input The content
1188
+ *
1189
+ * @return self The current Process instance
1190
+ *
1191
+ * @throws LogicException In case the process is running
1192
+ */
1193
+ public function setInput($input)
1194
+ {
1195
+ if ($this->isRunning()) {
1196
+ throw new LogicException('Input can not be set while the process is running.');
1197
+ }
1198
+
1199
+ $this->input = ProcessUtils::validateInput(__METHOD__, $input);
1200
+
1201
+ return $this;
1202
+ }
1203
+
1204
+ /**
1205
+ * Sets whether environment variables will be inherited or not.
1206
+ *
1207
+ * @param bool $inheritEnv
1208
+ *
1209
+ * @return self The current Process instance
1210
+ */
1211
+ public function inheritEnvironmentVariables($inheritEnv = true)
1212
+ {
1213
+ if (!$inheritEnv) {
1214
+ throw new InvalidArgumentException('Not inheriting environment variables is not supported.');
1215
+ }
1216
+
1217
+ return $this;
1218
+ }
1219
+
1220
+ /**
1221
+ * Performs a check between the timeout definition and the time the process started.
1222
+ *
1223
+ * In case you run a background process (with the start method), you should
1224
+ * trigger this method regularly to ensure the process timeout
1225
+ *
1226
+ * @throws ProcessTimedOutException In case the timeout was reached
1227
+ */
1228
+ public function checkTimeout()
1229
+ {
1230
+ if (self::STATUS_STARTED !== $this->status) {
1231
+ return;
1232
+ }
1233
+
1234
+ if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) {
1235
+ $this->stop(0);
1236
+
1237
+ throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
1238
+ }
1239
+
1240
+ if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) {
1241
+ $this->stop(0);
1242
+
1243
+ throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_IDLE);
1244
+ }
1245
+ }
1246
+
1247
+ /**
1248
+ * Returns whether TTY is supported on the current operating system.
1249
+ */
1250
+ public static function isTtySupported(): bool
1251
+ {
1252
+ static $isTtySupported;
1253
+
1254
+ if (null === $isTtySupported) {
1255
+ $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes);
1256
+ }
1257
+
1258
+ return $isTtySupported;
1259
+ }
1260
+
1261
+ /**
1262
+ * Returns whether PTY is supported on the current operating system.
1263
+ *
1264
+ * @return bool
1265
+ */
1266
+ public static function isPtySupported()
1267
+ {
1268
+ static $result;
1269
+
1270
+ if (null !== $result) {
1271
+ return $result;
1272
+ }
1273
+
1274
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1275
+ return $result = false;
1276
+ }
1277
+
1278
+ return $result = (bool) @proc_open('echo 1 >/dev/null', [['pty'], ['pty'], ['pty']], $pipes);
1279
+ }
1280
+
1281
+ /**
1282
+ * Creates the descriptors needed by the proc_open.
1283
+ */
1284
+ private function getDescriptors(): array
1285
+ {
1286
+ if ($this->input instanceof \Iterator) {
1287
+ $this->input->rewind();
1288
+ }
1289
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1290
+ $this->processPipes = new WindowsPipes($this->input, !$this->outputDisabled || $this->hasCallback);
1291
+ } else {
1292
+ $this->processPipes = new UnixPipes($this->isTty(), $this->isPty(), $this->input, !$this->outputDisabled || $this->hasCallback);
1293
+ }
1294
+
1295
+ return $this->processPipes->getDescriptors();
1296
+ }
1297
+
1298
+ /**
1299
+ * Builds up the callback used by wait().
1300
+ *
1301
+ * The callbacks adds all occurred output to the specific buffer and calls
1302
+ * the user callback (if present) with the received output.
1303
+ *
1304
+ * @param callable|null $callback The user defined PHP callback
1305
+ *
1306
+ * @return \Closure A PHP closure
1307
+ */
1308
+ protected function buildCallback(callable $callback = null)
1309
+ {
1310
+ if ($this->outputDisabled) {
1311
+ return function ($type, $data) use ($callback) {
1312
+ if (null !== $callback) {
1313
+ return $callback($type, $data);
1314
+ }
1315
+ };
1316
+ }
1317
+
1318
+ $out = self::OUT;
1319
+
1320
+ return function ($type, $data) use ($callback, $out) {
1321
+ if ($out == $type) {
1322
+ $this->addOutput($data);
1323
+ } else {
1324
+ $this->addErrorOutput($data);
1325
+ }
1326
+
1327
+ if (null !== $callback) {
1328
+ return $callback($type, $data);
1329
+ }
1330
+ };
1331
+ }
1332
+
1333
+ /**
1334
+ * Updates the status of the process, reads pipes.
1335
+ *
1336
+ * @param bool $blocking Whether to use a blocking read call
1337
+ */
1338
+ protected function updateStatus($blocking)
1339
+ {
1340
+ if (self::STATUS_STARTED !== $this->status) {
1341
+ return;
1342
+ }
1343
+
1344
+ $this->processInformation = proc_get_status($this->process);
1345
+ $running = $this->processInformation['running'];
1346
+
1347
+ $this->readPipes($running && $blocking, '\\' !== \DIRECTORY_SEPARATOR || !$running);
1348
+
1349
+ if ($this->fallbackStatus && $this->isSigchildEnabled()) {
1350
+ $this->processInformation = $this->fallbackStatus + $this->processInformation;
1351
+ }
1352
+
1353
+ if (!$running) {
1354
+ $this->close();
1355
+ }
1356
+ }
1357
+
1358
+ /**
1359
+ * Returns whether PHP has been compiled with the '--enable-sigchild' option or not.
1360
+ *
1361
+ * @return bool
1362
+ */
1363
+ protected function isSigchildEnabled()
1364
+ {
1365
+ if (null !== self::$sigchild) {
1366
+ return self::$sigchild;
1367
+ }
1368
+
1369
+ if (!\function_exists('phpinfo')) {
1370
+ return self::$sigchild = false;
1371
+ }
1372
+
1373
+ ob_start();
1374
+ phpinfo(INFO_GENERAL);
1375
+
1376
+ return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild');
1377
+ }
1378
+
1379
+ /**
1380
+ * Reads pipes for the freshest output.
1381
+ *
1382
+ * @param string $caller The name of the method that needs fresh outputs
1383
+ * @param bool $blocking Whether to use blocking calls or not
1384
+ *
1385
+ * @throws LogicException in case output has been disabled or process is not started
1386
+ */
1387
+ private function readPipesForOutput(string $caller, bool $blocking = false)
1388
+ {
1389
+ if ($this->outputDisabled) {
1390
+ throw new LogicException('Output has been disabled.');
1391
+ }
1392
+
1393
+ $this->requireProcessIsStarted($caller);
1394
+
1395
+ $this->updateStatus($blocking);
1396
+ }
1397
+
1398
+ /**
1399
+ * Validates and returns the filtered timeout.
1400
+ *
1401
+ * @throws InvalidArgumentException if the given timeout is a negative number
1402
+ */
1403
+ private function validateTimeout(?float $timeout): ?float
1404
+ {
1405
+ $timeout = (float) $timeout;
1406
+
1407
+ if (0.0 === $timeout) {
1408
+ $timeout = null;
1409
+ } elseif ($timeout < 0) {
1410
+ throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
1411
+ }
1412
+
1413
+ return $timeout;
1414
+ }
1415
+
1416
+ /**
1417
+ * Reads pipes, executes callback.
1418
+ *
1419
+ * @param bool $blocking Whether to use blocking calls or not
1420
+ * @param bool $close Whether to close file handles or not
1421
+ */
1422
+ private function readPipes(bool $blocking, bool $close)
1423
+ {
1424
+ $result = $this->processPipes->readAndWrite($blocking, $close);
1425
+
1426
+ $callback = $this->callback;
1427
+ foreach ($result as $type => $data) {
1428
+ if (3 !== $type) {
1429
+ $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data);
1430
+ } elseif (!isset($this->fallbackStatus['signaled'])) {
1431
+ $this->fallbackStatus['exitcode'] = (int) $data;
1432
+ }
1433
+ }
1434
+ }
1435
+
1436
+ /**
1437
+ * Closes process resource, closes file handles, sets the exitcode.
1438
+ *
1439
+ * @return int The exitcode
1440
+ */
1441
+ private function close(): int
1442
+ {
1443
+ $this->processPipes->close();
1444
+ if (\is_resource($this->process)) {
1445
+ proc_close($this->process);
1446
+ }
1447
+ $this->exitcode = $this->processInformation['exitcode'];
1448
+ $this->status = self::STATUS_TERMINATED;
1449
+
1450
+ if (-1 === $this->exitcode) {
1451
+ if ($this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) {
1452
+ // if process has been signaled, no exitcode but a valid termsig, apply Unix convention
1453
+ $this->exitcode = 128 + $this->processInformation['termsig'];
1454
+ } elseif ($this->isSigchildEnabled()) {
1455
+ $this->processInformation['signaled'] = true;
1456
+ $this->processInformation['termsig'] = -1;
1457
+ }
1458
+ }
1459
+
1460
+ // Free memory from self-reference callback created by buildCallback
1461
+ // Doing so in other contexts like __destruct or by garbage collector is ineffective
1462
+ // Now pipes are closed, so the callback is no longer necessary
1463
+ $this->callback = null;
1464
+
1465
+ return $this->exitcode;
1466
+ }
1467
+
1468
+ /**
1469
+ * Resets data related to the latest run of the process.
1470
+ */
1471
+ private function resetProcessData()
1472
+ {
1473
+ $this->starttime = null;
1474
+ $this->callback = null;
1475
+ $this->exitcode = null;
1476
+ $this->fallbackStatus = [];
1477
+ $this->processInformation = null;
1478
+ $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
1479
+ $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
1480
+ $this->process = null;
1481
+ $this->latestSignal = null;
1482
+ $this->status = self::STATUS_READY;
1483
+ $this->incrementalOutputOffset = 0;
1484
+ $this->incrementalErrorOutputOffset = 0;
1485
+ }
1486
+
1487
+ /**
1488
+ * Sends a POSIX signal to the process.
1489
+ *
1490
+ * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
1491
+ * @param bool $throwException Whether to throw exception in case signal failed
1492
+ *
1493
+ * @return bool True if the signal was sent successfully, false otherwise
1494
+ *
1495
+ * @throws LogicException In case the process is not running
1496
+ * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
1497
+ * @throws RuntimeException In case of failure
1498
+ */
1499
+ private function doSignal(int $signal, bool $throwException): bool
1500
+ {
1501
+ if (null === $pid = $this->getPid()) {
1502
+ if ($throwException) {
1503
+ throw new LogicException('Can not send signal on a non running process.');
1504
+ }
1505
+
1506
+ return false;
1507
+ }
1508
+
1509
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1510
+ exec(sprintf('taskkill /F /T /PID %d 2>&1', $pid), $output, $exitCode);
1511
+ if ($exitCode && $this->isRunning()) {
1512
+ if ($throwException) {
1513
+ throw new RuntimeException(sprintf('Unable to kill the process (%s).', implode(' ', $output)));
1514
+ }
1515
+
1516
+ return false;
1517
+ }
1518
+ } else {
1519
+ if (!$this->isSigchildEnabled()) {
1520
+ $ok = @proc_terminate($this->process, $signal);
1521
+ } elseif (\function_exists('posix_kill')) {
1522
+ $ok = @posix_kill($pid, $signal);
1523
+ } elseif ($ok = proc_open(sprintf('kill -%d %d', $signal, $pid), [2 => ['pipe', 'w']], $pipes)) {
1524
+ $ok = false === fgets($pipes[2]);
1525
+ }
1526
+ if (!$ok) {
1527
+ if ($throwException) {
1528
+ throw new RuntimeException(sprintf('Error while sending signal "%s".', $signal));
1529
+ }
1530
+
1531
+ return false;
1532
+ }
1533
+ }
1534
+
1535
+ $this->latestSignal = $signal;
1536
+ $this->fallbackStatus['signaled'] = true;
1537
+ $this->fallbackStatus['exitcode'] = -1;
1538
+ $this->fallbackStatus['termsig'] = $this->latestSignal;
1539
+
1540
+ return true;
1541
+ }
1542
+
1543
+ private function prepareWindowsCommandLine(string $cmd, array &$env)
1544
+ {
1545
+ $uid = uniqid('', true);
1546
+ $varCount = 0;
1547
+ $varCache = [];
1548
+ $cmd = preg_replace_callback(
1549
+ '/"(?:(
1550
+ [^"%!^]*+
1551
+ (?:
1552
+ (?: !LF! | "(?:\^[%!^])?+" )
1553
+ [^"%!^]*+
1554
+ )++
1555
+ ) | [^"]*+ )"/x',
1556
+ function ($m) use (&$env, &$varCache, &$varCount, $uid) {
1557
+ if (!isset($m[1])) {
1558
+ return $m[0];
1559
+ }
1560
+ if (isset($varCache[$m[0]])) {
1561
+ return $varCache[$m[0]];
1562
+ }
1563
+ if (false !== strpos($value = $m[1], "\0")) {
1564
+ $value = str_replace("\0", '?', $value);
1565
+ }
1566
+ if (false === strpbrk($value, "\"%!\n")) {
1567
+ return '"'.$value.'"';
1568
+ }
1569
+
1570
+ $value = str_replace(['!LF!', '"^!"', '"^%"', '"^^"', '""'], ["\n", '!', '%', '^', '"'], $value);
1571
+ $value = '"'.preg_replace('/(\\\\*)"/', '$1$1\\"', $value).'"';
1572
+ $var = $uid.++$varCount;
1573
+
1574
+ $env[$var] = $value;
1575
+
1576
+ return $varCache[$m[0]] = '!'.$var.'!';
1577
+ },
1578
+ $cmd
1579
+ );
1580
+
1581
+ $cmd = 'cmd /V:ON /E:ON /D /C ('.str_replace("\n", ' ', $cmd).')';
1582
+ foreach ($this->processPipes->getFiles() as $offset => $filename) {
1583
+ $cmd .= ' '.$offset.'>"'.$filename.'"';
1584
+ }
1585
+
1586
+ return $cmd;
1587
+ }
1588
+
1589
+ /**
1590
+ * Ensures the process is running or terminated, throws a LogicException if the process has a not started.
1591
+ *
1592
+ * @throws LogicException if the process has not run
1593
+ */
1594
+ private function requireProcessIsStarted(string $functionName)
1595
+ {
1596
+ if (!$this->isStarted()) {
1597
+ throw new LogicException(sprintf('Process must be started before calling %s.', $functionName));
1598
+ }
1599
+ }
1600
+
1601
+ /**
1602
+ * Ensures the process is terminated, throws a LogicException if the process has a status different than "terminated".
1603
+ *
1604
+ * @throws LogicException if the process is not yet terminated
1605
+ */
1606
+ private function requireProcessIsTerminated(string $functionName)
1607
+ {
1608
+ if (!$this->isTerminated()) {
1609
+ throw new LogicException(sprintf('Process must be terminated before calling %s.', $functionName));
1610
+ }
1611
+ }
1612
+
1613
+ /**
1614
+ * Escapes a string to be used as a shell argument.
1615
+ */
1616
+ private function escapeArgument(?string $argument): string
1617
+ {
1618
+ if ('' === $argument || null === $argument) {
1619
+ return '""';
1620
+ }
1621
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
1622
+ return "'".str_replace("'", "'\\''", $argument)."'";
1623
+ }
1624
+ if (false !== strpos($argument, "\0")) {
1625
+ $argument = str_replace("\0", '?', $argument);
1626
+ }
1627
+ if (!preg_match('/[\/()%!^"<>&|\s]/', $argument)) {
1628
+ return $argument;
1629
+ }
1630
+ $argument = preg_replace('/(\\\\+)$/', '$1$1', $argument);
1631
+
1632
+ return '"'.str_replace(['"', '^', '%', '!', "\n"], ['""', '"^^"', '"^%"', '"^!"', '!LF!'], $argument).'"';
1633
+ }
1634
+
1635
+ private function getDefaultEnv()
1636
+ {
1637
+ $env = [];
1638
+
1639
+ foreach ($_SERVER as $k => $v) {
1640
+ if (\is_string($v) && false !== $v = getenv($k)) {
1641
+ $env[$k] = $v;
1642
+ }
1643
+ }
1644
+
1645
+ foreach ($_ENV as $k => $v) {
1646
+ if (\is_string($v)) {
1647
+ $env[$k] = $v;
1648
+ }
1649
+ }
1650
+
1651
+ return $env;
1652
+ }
1653
+ }