wp-studio 1.7.8-beta2 → 1.7.8-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +33 -0
  2. package/assets/demo.gif +0 -0
  3. package/dist/cli/{_events-BRGCap7g.mjs → _events-C60cNJ1W.mjs} +1 -1
  4. package/dist/cli/{index-9Oz-0bqF.mjs → index-D9syEMMz.mjs} +4 -4
  5. package/dist/cli/{index-CT4S2538.mjs → index-Ru6CUP6w.mjs} +24 -12
  6. package/dist/cli/{login-D4E3GoXe.mjs → login-C3QlGVbr.mjs} +1 -1
  7. package/dist/cli/{logout-DE-RoshK.mjs → logout-B63eZwJZ.mjs} +1 -1
  8. package/dist/cli/main.mjs +2 -1
  9. package/dist/cli/{resume-DLoXmzNG.mjs → resume-DQT_MK6A.mjs} +1 -1
  10. package/dist/cli/{set-B0L-QiXT.mjs → set-C805heQS.mjs} +1 -1
  11. package/dist/cli/{set-B8YYUENH.mjs → set-CjTbueyB.mjs} +1 -1
  12. package/dist/cli/{status-DEOAA0yx.mjs → status-SnKm1rRP.mjs} +1 -1
  13. package/dist/cli/{wp-CobSX6C6.mjs → wp-D0HZdudM.mjs} +1 -1
  14. package/dist/cli/wp-files/sqlite-command/composer.json +4 -3
  15. package/dist/cli/wp-files/sqlite-command/composer.lock +132 -80
  16. package/dist/cli/wp-files/sqlite-command/vendor/autoload.php +1 -1
  17. package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_classmap.php +58 -70
  18. package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_namespaces.php +1 -0
  19. package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_psr4.php +1 -1
  20. package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_real.php +5 -5
  21. package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_static.php +78 -80
  22. package/dist/cli/wp-files/sqlite-command/vendor/composer/installed.json +104 -49
  23. package/dist/cli/wp-files/sqlite-command/vendor/composer/installed.php +29 -16
  24. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/CHANGELOG.md +103 -0
  25. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/Comparator.php +62 -0
  26. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/DateComparator.php +50 -0
  27. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/NumberComparator.php +78 -0
  28. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
  29. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +19 -0
  30. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Finder.php +851 -0
  31. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Gitignore.php +91 -0
  32. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Glob.php +116 -0
  33. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
  34. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
  35. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +48 -0
  36. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +110 -0
  37. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +51 -0
  38. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
  39. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +45 -0
  40. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/LazyIterator.php +32 -0
  41. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +107 -0
  42. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
  43. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +134 -0
  44. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
  45. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/SortableIterator.php +115 -0
  46. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +173 -0
  47. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/LICENSE +19 -0
  48. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/README.md +14 -0
  49. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/SplFileInfo.php +80 -0
  50. package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/composer.json +31 -0
  51. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/.gitattributes +8 -0
  52. package/dist/cli/wp-files/sqlite-command/vendor/{mustache → wp-cli}/mustache/LICENSE +1 -1
  53. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/README.md +76 -0
  54. package/dist/cli/wp-files/sqlite-command/vendor/{mustache → wp-cli}/mustache/composer.json +6 -16
  55. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/src/Mustache/Autoloader.php +88 -0
  56. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/AbstractCache.php +7 -15
  57. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/FilesystemCache.php +15 -20
  58. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/NoopCache.php +4 -8
  59. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache.php +7 -10
  60. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Compiler.php +87 -144
  61. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Context.php +19 -23
  62. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Engine.php +134 -251
  63. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/InvalidArgumentException.php +2 -6
  64. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/LogicException.php +2 -6
  65. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/RuntimeException.php +2 -6
  66. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/SyntaxException.php +8 -7
  67. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownFilterException.php +7 -7
  68. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownHelperException.php +7 -7
  69. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownTemplateException.php +7 -7
  70. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception.php +5 -4
  71. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/HelperCollection.php +17 -22
  72. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/LambdaHelper.php +8 -28
  73. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/ArrayLoader.php +9 -12
  74. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/CascadingLoader.php +15 -18
  75. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/FilesystemLoader.php +18 -24
  76. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/InlineLoader.php +13 -19
  77. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/MutableLoader.php +7 -4
  78. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/ProductionFilesystemLoader.php +16 -23
  79. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/StringLoader.php +4 -8
  80. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader.php +7 -8
  81. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger/AbstractLogger.php +26 -22
  82. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger/StreamLogger.php +20 -25
  83. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger.php +37 -13
  84. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Parser.php +93 -100
  85. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Source/FilesystemSource.php +7 -11
  86. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Source.php +5 -4
  87. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Template.php +32 -39
  88. package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Tokenizer.php +29 -33
  89. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.actrc +3 -0
  90. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.gitattributes +6 -0
  91. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.mailmap +234 -0
  92. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/README.md +4 -4
  93. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/VERSION +1 -1
  94. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/CHANGELOG.md +0 -65
  95. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/README.md +1 -2
  96. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/certificates/cacert.pem +372 -315
  97. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/certificates/cacert.pem.sha256 +1 -1
  98. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/composer.json +5 -7
  99. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Iri.php +18 -20
  100. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Requests.php +1 -1
  101. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Response/Headers.php +1 -1
  102. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Transport/Curl.php +1 -5
  103. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Transport/Fsockopen.php +0 -2
  104. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Utility/CaseInsensitiveDictionary.php +0 -12
  105. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Utility/FilteredIterator.php +2 -2
  106. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/composer.json +13 -30
  107. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/dependencies.yml +6 -0
  108. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/manifest.json +1 -1
  109. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Autoloader.php +2 -4
  110. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/AutoloaderStep.php +1 -10
  111. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/CheckRoot.php +2 -20
  112. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DefineProtectedCommands.php +3 -3
  113. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFrameworkAutoloader.php +4 -3
  114. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeRequestsAutoloader.php +3 -4
  115. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeContexts.php +0 -3
  116. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeLogger.php +1 -1
  117. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php +3 -6
  118. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/{RegisterShutdownHandler.php → LoadDispatcher.php} +4 -6
  119. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadRequiredCommand.php +5 -9
  120. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadUtilityFunctions.php +0 -1
  121. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Completions.php +6 -149
  122. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Configurator.php +49 -202
  123. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Admin.php +21 -113
  124. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Auto.php +1 -1
  125. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Cli.php +1 -0
  126. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Frontend.php +1 -0
  127. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php +26 -63
  128. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CompositeCommand.php +9 -19
  129. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php +19 -284
  130. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/DocParser.php +5 -17
  131. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Exception/NonExistentKeyException.php +3 -6
  132. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Extractor.php +54 -30
  133. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Base.php +3 -7
  134. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Comment.php +2 -4
  135. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Post.php +3 -8
  136. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Signup.php +1 -3
  137. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Site.php +4 -12
  138. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/User.php +1 -3
  139. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/FileCache.php +33 -135
  140. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Formatter.php +57 -221
  141. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Inflector.php +4 -4
  142. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/CSV.php +1 -6
  143. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Query.php +1 -3
  144. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Table.php +1 -7
  145. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Transform.php +0 -2
  146. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Base.php +0 -15
  147. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Quiet.php +3 -2
  148. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Regular.php +3 -4
  149. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/NoOp.php +0 -4
  150. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Process.php +7 -40
  151. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/RequestsLibrary.php +1 -4
  152. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php +234 -795
  153. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/SynopsisParser.php +26 -116
  154. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/SynopsisValidator.php +1 -1
  155. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Traverser/RecursiveDataStructureTraverser.php +26 -69
  156. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/UpgraderSkin.php +1 -1
  157. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/WpHttpCacheManager.php +5 -67
  158. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/WpOrgApi.php +3 -3
  159. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/boot-fs.php +2 -2
  160. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/bootstrap.php +2 -5
  161. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/class-wp-cli.php +62 -311
  162. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Alias_Command.php +60 -292
  163. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Cache_Command.php +1 -1
  164. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Command.php +31 -191
  165. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/Help_Command.php +35 -177
  166. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/config-spec.php +4 -28
  167. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/utils-wp.php +47 -81
  168. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/utils.php +200 -512
  169. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/wp-cli.php +2 -2
  170. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/wp-settings-cli.php +465 -0
  171. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/templates/man-params.mustache +4 -0
  172. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/templates/man.mustache +0 -8
  173. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ArgValidationTest.php +74 -0
  174. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/CommandFactoryTest.php +420 -0
  175. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ConfiguratorTest.php +87 -0
  176. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/DocParserTest.php +213 -0
  177. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ExtractorTest.php +293 -0
  178. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/FileCacheTest.php +207 -0
  179. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/HelpTest.php +119 -0
  180. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/InflectorTest.php +37 -0
  181. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/LoggingTest.php +124 -0
  182. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ProcessTest.php +30 -0
  183. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/SynopsisParserTest.php +194 -0
  184. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/UtilsTest.php +1092 -0
  185. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WPCLITest.php +16 -0
  186. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/Iterators/CSVTest.php +109 -0
  187. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/Traversers/RecursiveDataStructureTraverserTest.php +151 -0
  188. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/WpOrgApiTest.php +166 -0
  189. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WpVersionCompareTest.php +78 -0
  190. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/bootstrap.php +17 -0
  191. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-class-win.php +70 -0
  192. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-class.php +70 -0
  193. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-function-win.php +19 -0
  194. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-function.php +19 -0
  195. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/bar.ab2 +0 -0
  196. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.ab1 +0 -0
  197. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.ac1 +0 -0
  198. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.efg2 +0 -0
  199. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.ab1 +0 -0
  200. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.ab2 +0 -0
  201. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.efg1 +0 -0
  202. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.efg2 +0 -0
  203. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/mock-requests-transport.php +34 -0
  204. package/dist/cli/wp-files/sqlite-command/version +1 -1
  205. package/package.json +4 -3
  206. package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/.php-cs-fixer.php +0 -20
  207. package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/README.md +0 -94
  208. package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/RenderedString.php +0 -51
  209. package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/compat.php +0 -282
  210. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.typos.toml +0 -14
  211. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/AGENTS.md +0 -121
  212. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/proxy.py +0 -5
  213. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/start.sh +0 -19
  214. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/stop.sh +0 -10
  215. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Path.php +0 -260
  216. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/ShutdownHandler.php +0 -329
  217. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/schemas/wp-cli-config.json +0 -218
  218. package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/schemas/wp-cli.example.yml +0 -55
  219. /package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/{codecov.yml → tests/data/expand_globs/bar.ab1} +0 -0
@@ -0,0 +1,119 @@
1
+ <?php
2
+
3
+ use WP_CLI\Tests\TestCase;
4
+
5
+ class HelpTest extends TestCase {
6
+
7
+ public static function set_up_before_class() {
8
+ require_once dirname( __DIR__ ) . '/php/class-wp-cli.php';
9
+ require_once dirname( __DIR__ ) . '/php/class-wp-cli-command.php';
10
+ require_once dirname( __DIR__ ) . '/php/commands/help.php';
11
+ }
12
+
13
+ public function test_parse_reference_links() {
14
+ $test_class = new ReflectionClass( 'Help_Command' );
15
+ $method = $test_class->getMethod( 'parse_reference_links' );
16
+ $method->setAccessible( true );
17
+
18
+ $desc = 'This is a [reference link](https://wordpress.org/). It should be displayed very nice!';
19
+ $result = $method->invokeArgs( null, [ $desc ] );
20
+
21
+ $expected = <<<EOL
22
+ This is a [reference link][1]. It should be displayed very nice!
23
+
24
+ ---
25
+ [1] https://wordpress.org/
26
+ EOL;
27
+ $this->assertSame( $expected, $result );
28
+
29
+ $desc = 'This is a [reference link](https://wordpress.org/) and [second link](http://wp-cli.org/). It should be displayed very nice!';
30
+ $result = $method->invokeArgs( null, [ $desc ] );
31
+
32
+ $expected = <<<EOL
33
+ This is a [reference link][1] and [second link][2]. It should be displayed very nice!
34
+
35
+ ---
36
+ [1] https://wordpress.org/
37
+ [2] http://wp-cli.org/
38
+ EOL;
39
+ $this->assertSame( $expected, $result );
40
+
41
+ $desc = <<<EOL
42
+ This is a [reference link](https://wordpress.org/) and [second link](http://wp-cli.org/).
43
+ It should be displayed very nice!
44
+ EOL;
45
+ $result = $method->invokeArgs( null, [ $desc ] );
46
+
47
+ $expected = <<<EOL
48
+ This is a [reference link][1] and [second link][2].
49
+ It should be displayed very nice!
50
+
51
+ ---
52
+ [1] https://wordpress.org/
53
+ [2] http://wp-cli.org/
54
+ EOL;
55
+
56
+ $this->assertSame( $expected, $result );
57
+
58
+ $desc = <<<EOL
59
+ This is a [reference link](https://wordpress.org/) and [second link](http://wp-cli.org/).
60
+ It should be displayed very nice!
61
+
62
+ ## Example
63
+
64
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
65
+ EOL;
66
+ $result = $method->invokeArgs( null, [ $desc ] );
67
+
68
+ $expected = <<<EOL
69
+ This is a [reference link][1] and [second link][2].
70
+ It should be displayed very nice!
71
+
72
+ ---
73
+ [1] https://wordpress.org/
74
+ [2] http://wp-cli.org/
75
+
76
+ ## Example
77
+
78
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
79
+ EOL;
80
+
81
+ $this->assertSame( $expected, $result );
82
+
83
+ $desc = <<<EOL
84
+ ## Example
85
+
86
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
87
+ EOL;
88
+ $result = $method->invokeArgs( null, [ $desc ] );
89
+
90
+ $expected = <<<EOL
91
+ ## Example
92
+
93
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
94
+ EOL;
95
+
96
+ $this->assertSame( $expected, $result );
97
+
98
+ $desc = <<<EOL
99
+ This is a long description.
100
+ It doesn't have any link.
101
+
102
+ ## Example
103
+
104
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
105
+ EOL;
106
+ $result = $method->invokeArgs( null, [ $desc ] );
107
+
108
+ $expected = <<<EOL
109
+ This is a long description.
110
+ It doesn't have any link.
111
+
112
+ ## Example
113
+
114
+ It doesn't expect to be link here like [reference link](https://wordpress.org/).
115
+ EOL;
116
+
117
+ $this->assertSame( $expected, $result );
118
+ }
119
+ }
@@ -0,0 +1,37 @@
1
+ <?php
2
+
3
+ use WP_CLI\Inflector;
4
+ use WP_CLI\Tests\TestCase;
5
+
6
+ class InflectorTest extends TestCase {
7
+
8
+ /**
9
+ * @dataProvider dataProviderPluralize
10
+ */
11
+ public function testPluralize( $singular, $expected ) {
12
+ $this->assertEquals( $expected, Inflector::pluralize( $singular ) );
13
+ }
14
+
15
+ public static function dataProviderPluralize() {
16
+ return [
17
+ [ 'string', 'strings' ], // Regular.
18
+ [ 'person', 'people' ], // Irregular.
19
+ [ 'scissors', 'scissors' ], // Uncountable.
20
+ ];
21
+ }
22
+
23
+ /**
24
+ * @dataProvider dataProviderSingularize
25
+ */
26
+ public function testSingularize( $singular, $expected ) {
27
+ $this->assertEquals( $expected, Inflector::singularize( $singular ) );
28
+ }
29
+
30
+ public static function dataProviderSingularize() {
31
+ return [
32
+ [ 'strings', 'string' ], // Regular.
33
+ [ 'people', 'person' ], // Irregular.
34
+ [ 'scissors', 'scissors' ], // Uncountable.
35
+ ];
36
+ }
37
+ }
@@ -0,0 +1,124 @@
1
+ <?php
2
+ // phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound -- Ignoring test doubles.
3
+ // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound -- Ignoring test doubles.
4
+
5
+ use WP_CLI\Tests\TestCase;
6
+
7
+ class MockRegularLogger extends WP_CLI\Loggers\Regular {
8
+
9
+ protected function get_runner() {
10
+ return (object) [
11
+ 'config' => [
12
+ 'debug' => true,
13
+ ],
14
+ ];
15
+ }
16
+
17
+ protected function write( $handle, $str ) {
18
+ echo $str;
19
+ }
20
+ }
21
+
22
+ class MockQuietLogger extends WP_CLI\Loggers\Quiet {
23
+
24
+ protected function get_runner() {
25
+ return (object) [
26
+ 'config' => [
27
+ 'debug' => true,
28
+ ],
29
+ ];
30
+ }
31
+ }
32
+
33
+ class LoggingTest extends TestCase {
34
+
35
+ public function testLogDebug() {
36
+ $message = 'This is a test message.';
37
+
38
+ $regular_logger = new MockRegularLogger( false );
39
+ $this->expectOutputRegex( "/Debug: {$message} \(\d+\.*\d*s\)/" );
40
+ $regular_logger->debug( $message );
41
+
42
+ $quiet_logger = new MockQuietLogger();
43
+ $this->expectOutputRegex( "/Debug: {$message} \(\d+\.*\d*s\)/" );
44
+ $quiet_logger->debug( $message );
45
+ }
46
+
47
+ public function testLogEscaping() {
48
+ $logger = new MockRegularLogger( false );
49
+
50
+ $message = 'foo%20bar';
51
+
52
+ $this->expectOutputString( "Success: $message\n" );
53
+ $logger->success( $message );
54
+ }
55
+
56
+ public function testExecutionLogger() {
57
+ // Save Runner config.
58
+ $runner = WP_CLI::get_runner();
59
+ $runner_config = new \ReflectionProperty( $runner, 'config' );
60
+ $runner_config->setAccessible( true );
61
+
62
+ $prev_config = $runner_config->getValue( $runner );
63
+
64
+ // Set debug.
65
+ $runner_config->setValue( $runner, [ 'debug' => true ] );
66
+
67
+ $logger = new WP_CLI\Loggers\Execution();
68
+
69
+ // Standard use.
70
+
71
+ $logger->info( 'info' );
72
+ $logger->info( 'info2' );
73
+ $logger->success( 'success' );
74
+ $logger->warning( 'warning' );
75
+ $logger->error( 'error' );
76
+ $logger->success( 'success2' );
77
+ $logger->warning( 'warning2' );
78
+ $logger->debug( 'debug', 'group' );
79
+ $logger->error_multi_line( [ 'line11', 'line12', 'line13' ] );
80
+ $logger->error( 'error2' );
81
+ $logger->error_multi_line( [ 'line21' ] );
82
+ $logger->debug( 'debug2', 'group2' );
83
+
84
+ $this->assertSame( "info\ninfo2\nSuccess: success\nSuccess: success2\n", $logger->stdout );
85
+
86
+ $match_count = preg_match(
87
+ '/^'
88
+ . 'Warning: warning\nError: error\n'
89
+ . 'Warning: warning2\nDebug \(group\): debug \([0-9.]+s\)\n'
90
+ . 'Error:\nline11\nline12\nline13\n---------\n\nError: error2\n'
91
+ . 'Error:\nline21\n---------\n\nDebug \(group2\): debug2 \([0-9.]+s\)$/',
92
+ $logger->stderr
93
+ );
94
+ $this->assertSame( 1, $match_count );
95
+
96
+ $logger->stdout = '';
97
+ $logger->stderr = '';
98
+
99
+ // With output buffering.
100
+
101
+ $logger->ob_start();
102
+
103
+ echo 'echo';
104
+ $logger->info( 'info' );
105
+ print "print\n";
106
+ $logger->success( 'success' );
107
+ echo "echo2\n";
108
+ $logger->error( 'error' );
109
+ echo "echo3\n";
110
+ $logger->success( 'success2' );
111
+ echo 'echo4';
112
+
113
+ $logger->ob_end();
114
+
115
+ $this->assertSame( "echoinfo\nprint\nSuccess: success\necho2\necho3\nSuccess: success2\necho4", $logger->stdout );
116
+ $this->assertSame( "Error: error\n", $logger->stderr );
117
+
118
+ $logger->stdout = '';
119
+ $logger->stderr = '';
120
+
121
+ // Restore.
122
+ $runner_config->setValue( $runner, $prev_config );
123
+ }
124
+ }
@@ -0,0 +1,30 @@
1
+ <?php
2
+
3
+ use WP_CLI\Process;
4
+ use WP_CLI\Tests\TestCase;
5
+ use WP_CLI\Utils;
6
+
7
+ class ProcessTest extends TestCase {
8
+
9
+ /**
10
+ * @dataProvider data_process_env
11
+ */
12
+ public function test_process_env( $cmd_prefix, $env, $expected_env_vars, $expected_out ) {
13
+ $code = vsprintf( str_repeat( 'echo getenv( \'%s\' );', count( $expected_env_vars ) ), $expected_env_vars );
14
+
15
+ $cmd = $cmd_prefix . ' ' . escapeshellarg( Utils\get_php_binary() ) . ' -r ' . escapeshellarg( $code );
16
+ $process_run = Process::create( $cmd, null /*cwd*/, $env )->run();
17
+
18
+ $this->assertSame( $process_run->stdout, $expected_out );
19
+ }
20
+
21
+ public static function data_process_env() {
22
+ return [
23
+ [ '', [], [], '' ],
24
+ [ 'ENV=blah', [], [ 'ENV' ], 'blah' ],
25
+ [ 'ENV="blah blah"', [], [ 'ENV' ], 'blah blah' ],
26
+ [ 'ENV_1="blah1 blah1" ENV_2="blah2" ENV_3=blah3', [ 'ENV' => 'in' ], [ 'ENV', 'ENV_1', 'ENV_2', 'ENV_3' ], 'inblah1 blah1blah2blah3' ],
27
+ [ 'ENV=blah', [ 'ENV_1' => 'in1', 'ENV_2' => 'in2' ], [ 'ENV_1', 'ENV_2', 'ENV' ], 'in1in2blah' ],
28
+ ];
29
+ }
30
+ }
@@ -0,0 +1,194 @@
1
+ <?php
2
+
3
+ use WP_CLI\SynopsisParser;
4
+ use WP_CLI\Tests\TestCase;
5
+
6
+ class SynopsisParserTest extends TestCase {
7
+
8
+ public function testEmpty() {
9
+ $r = SynopsisParser::parse( ' ' );
10
+
11
+ $this->assertEmpty( $r );
12
+ }
13
+
14
+ public function testPositional() {
15
+ $r = SynopsisParser::parse( '<plugin|zip> [<bar>]' );
16
+
17
+ $this->assertCount( 2, $r );
18
+
19
+ $param = $r[0];
20
+ $this->assertEquals( 'positional', $param['type'] );
21
+ $this->assertFalse( $param['optional'] );
22
+
23
+ $param = $r[1];
24
+ $this->assertEquals( 'positional', $param['type'] );
25
+ $this->assertTrue( $param['optional'] );
26
+ }
27
+
28
+ public function testFlag() {
29
+ $r = SynopsisParser::parse( '[--foo]' );
30
+
31
+ $this->assertCount( 1, $r );
32
+
33
+ $param = $r[0];
34
+ $this->assertEquals( 'flag', $param['type'] );
35
+ $this->assertTrue( $param['optional'] );
36
+
37
+ // Flags can't be mandatory.
38
+ $r = SynopsisParser::parse( '--foo' );
39
+
40
+ $this->assertCount( 1, $r );
41
+
42
+ $param = $r[0];
43
+ $this->assertEquals( 'unknown', $param['type'] );
44
+ }
45
+
46
+ public function testGeneric() {
47
+ $r = SynopsisParser::parse( '--<field>=<value> [--<field>=<value>] --<field>[=<value>] [--<field>[=<value>]]' );
48
+
49
+ $this->assertCount( 4, $r );
50
+
51
+ $param = $r[0];
52
+ $this->assertEquals( 'generic', $param['type'] );
53
+ $this->assertFalse( $param['optional'] );
54
+
55
+ $param = $r[1];
56
+ $this->assertEquals( 'generic', $param['type'] );
57
+ $this->assertTrue( $param['optional'] );
58
+
59
+ $param = $r[2];
60
+ $this->assertEquals( 'unknown', $param['type'] );
61
+
62
+ $param = $r[3];
63
+ $this->assertEquals( 'unknown', $param['type'] );
64
+ }
65
+
66
+ public function testAssoc() {
67
+ $r = SynopsisParser::parse( '--foo=<value> [--bar=<value>] [--bar[=<value>]]' );
68
+
69
+ $this->assertCount( 3, $r );
70
+
71
+ $param = $r[0];
72
+ $this->assertEquals( 'assoc', $param['type'] );
73
+ $this->assertFalse( $param['optional'] );
74
+
75
+ $param = $r[1];
76
+ $this->assertEquals( 'assoc', $param['type'] );
77
+ $this->assertTrue( $param['optional'] );
78
+
79
+ $param = $r[2];
80
+ $this->assertEquals( 'assoc', $param['type'] );
81
+ $this->assertTrue( $param['optional'] );
82
+ $this->assertTrue( $param['value']['optional'] );
83
+ }
84
+
85
+ public function testInvalidAssoc() {
86
+ $r = SynopsisParser::parse( '--bar[=<value>] --bar=[<value>] --count=100' );
87
+
88
+ $this->assertCount( 3, $r );
89
+
90
+ $this->assertEquals( 'unknown', $r[0]['type'] );
91
+ $this->assertEquals( 'unknown', $r[1]['type'] );
92
+ $this->assertEquals( 'unknown', $r[2]['type'] );
93
+ }
94
+
95
+ public function testRepeating() {
96
+ $r = SynopsisParser::parse( '<positional>... [--<field>=<value>...]' );
97
+
98
+ $this->assertCount( 2, $r );
99
+
100
+ $param = $r[0];
101
+ $this->assertEquals( 'positional', $param['type'] );
102
+ $this->assertTrue( $param['repeating'] );
103
+
104
+ $param = $r[1];
105
+ $this->assertEquals( 'generic', $param['type'] );
106
+ $this->assertTrue( $param['repeating'] );
107
+ }
108
+
109
+ public function testCombined() {
110
+ $r = SynopsisParser::parse( '<positional> --assoc=<someval> --<field>=<value> [--flag]' );
111
+
112
+ $this->assertCount( 4, $r );
113
+
114
+ $this->assertEquals( 'positional', $r[0]['type'] );
115
+ $this->assertEquals( 'assoc', $r[1]['type'] );
116
+ $this->assertEquals( 'generic', $r[2]['type'] );
117
+ $this->assertEquals( 'flag', $r[3]['type'] );
118
+ }
119
+
120
+ public function testAllowedValueCharacters() {
121
+ $r = SynopsisParser::parse( '--capitals=<VALUE> --hyphen=<val-ue> --combined=<VAL-ue> --disallowed=<wrong:char>' );
122
+
123
+ $this->assertCount( 4, $r );
124
+
125
+ $param = $r[0];
126
+ $this->assertEquals( 'assoc', $param['type'] );
127
+ $this->assertFalse( $param['optional'] );
128
+
129
+ $param = $r[1];
130
+ $this->assertEquals( 'assoc', $param['type'] );
131
+ $this->assertFalse( $param['optional'] );
132
+
133
+ $param = $r[2];
134
+ $this->assertEquals( 'assoc', $param['type'] );
135
+ $this->assertFalse( $param['optional'] );
136
+
137
+ $this->assertEquals( 'unknown', $r[3]['type'] );
138
+ }
139
+
140
+ public function testRender() {
141
+ $a = [
142
+ [
143
+ 'name' => 'message',
144
+ 'type' => 'positional',
145
+ 'description' => 'A short message to display to the user.',
146
+ ],
147
+ [
148
+ 'name' => 'secrets',
149
+ 'type' => 'positional',
150
+ 'description' => 'You may tell secrets, or you may not',
151
+ 'optional' => true,
152
+ 'repeating' => true,
153
+ ],
154
+ [
155
+ 'name' => 'meal',
156
+ 'type' => 'assoc',
157
+ 'description' => 'A meal during the day or night.',
158
+ ],
159
+ [
160
+ 'name' => 'snack',
161
+ 'type' => 'assoc',
162
+ 'description' => 'If you are hungry between meals, you should snack.',
163
+ 'optional' => true,
164
+ ],
165
+ [
166
+ 'name' => 'skip',
167
+ 'type' => 'assoc',
168
+ 'description' => 'Skip all meals, or skip a single meal by name.',
169
+ 'optional' => true,
170
+ 'value' => [
171
+ 'optional' => true,
172
+ ],
173
+ ],
174
+ ];
175
+ $this->assertEquals( '<message> [<secrets>...] --meal=<meal> [--snack=<snack>] [--skip[=<skip>]]', SynopsisParser::render( $a ) );
176
+ }
177
+
178
+ public function testParseThenRender() {
179
+ $o = '<positional> --assoc=<assoc> [--double[=<optional>]] --<field>=<value> [--flag]';
180
+ $a = SynopsisParser::parse( $o );
181
+ $r = SynopsisParser::render( $a );
182
+ $this->assertEquals( $o, $r );
183
+ }
184
+
185
+ public function testParseThenRenderNumeric() {
186
+ $o = '<p1ositional> --a2ssoc=<assoc> --<field>=<value> [--f3lag]';
187
+ $a = SynopsisParser::parse( $o );
188
+ $this->assertEquals( 'p1ositional', $a[0]['name'] );
189
+ $this->assertEquals( 'a2ssoc', $a[1]['name'] );
190
+ $this->assertEquals( 'f3lag', $a[3]['name'] );
191
+ $r = SynopsisParser::render( $a );
192
+ $this->assertEquals( $o, $r );
193
+ }
194
+ }