@scandipwa/magento-scripts 2.0.3 → 2.0.5

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 (347) hide show
  1. package/.eslintrc +6 -1
  2. package/exec.js +75 -39
  3. package/index.js +87 -46
  4. package/lib/commands/cleanup.js +18 -21
  5. package/lib/commands/cli.js +138 -73
  6. package/lib/commands/execute.js +5 -5
  7. package/lib/commands/import-db.js +21 -24
  8. package/lib/commands/link.js +17 -20
  9. package/lib/commands/logs.js +91 -91
  10. package/lib/commands/start.js +229 -191
  11. package/lib/commands/status.js +64 -50
  12. package/lib/commands/stop.js +14 -11
  13. package/lib/config/check-configuration-file.js +33 -28
  14. package/lib/config/cma-config.js +4 -4
  15. package/lib/config/config.js +40 -18
  16. package/lib/config/dependencies-for-platforms.js +33 -3
  17. package/lib/config/docker.js +259 -160
  18. package/lib/config/get-magento-version-config.js +45 -38
  19. package/lib/config/get-port-config.js +30 -44
  20. package/lib/config/get-project-configuration.js +8 -8
  21. package/lib/config/index.js +51 -42
  22. package/lib/config/magento/required-php-extensions/index.js +33 -19
  23. package/lib/config/magento/required-php-extensions/magento-2.3.js +2 -2
  24. package/lib/config/magento/required-php-extensions/magento-2.4.js +2 -2
  25. package/lib/config/magento-config.js +4 -4
  26. package/lib/config/php-config.js +8 -6
  27. package/lib/config/port-config.js +62 -43
  28. package/lib/config/save-config.js +6 -6
  29. package/lib/config/scandipwa-versions.js +2 -2
  30. package/lib/config/services/composer/versions/composer-1.js +2 -2
  31. package/lib/config/services/composer/versions/composer-2.js +2 -2
  32. package/lib/config/services/composer/versions/index.js +1 -1
  33. package/lib/config/services/elasticsearch/base-repo.js +1 -1
  34. package/lib/config/services/elasticsearch/default-es-env.js +4 -1
  35. package/lib/config/services/elasticsearch/versions/elasticsearch-6.8.js +17 -14
  36. package/lib/config/services/elasticsearch/versions/elasticsearch-7.10.js +4 -4
  37. package/lib/config/services/elasticsearch/versions/elasticsearch-7.12.js +4 -4
  38. package/lib/config/services/elasticsearch/versions/elasticsearch-7.16.js +4 -4
  39. package/lib/config/services/elasticsearch/versions/elasticsearch-7.17.js +4 -4
  40. package/lib/config/services/elasticsearch/versions/elasticsearch-7.6.js +4 -4
  41. package/lib/config/services/elasticsearch/versions/elasticsearch-7.7.js +4 -4
  42. package/lib/config/services/elasticsearch/versions/elasticsearch-7.9.js +4 -4
  43. package/lib/config/services/elasticsearch/versions/index.js +9 -9
  44. package/lib/config/services/maildev/index.js +5 -2
  45. package/lib/config/services/mariadb/versions/index.js +1 -1
  46. package/lib/config/services/mariadb/versions/mariadb-10.2.js +5 -4
  47. package/lib/config/services/mariadb/versions/mariadb-10.3.js +5 -4
  48. package/lib/config/services/mariadb/versions/mariadb-10.4.js +5 -4
  49. package/lib/config/services/nginx/versions/index.js +1 -1
  50. package/lib/config/services/nginx/versions/nginx-1.18.js +5 -4
  51. package/lib/config/services/php/base-repo.js +1 -1
  52. package/lib/config/services/php/extensions/apcu.js +3 -3
  53. package/lib/config/services/php/extensions/bcmath.js +2 -2
  54. package/lib/config/services/php/extensions/curl.js +3 -6
  55. package/lib/config/services/php/extensions/gd.js +4 -3
  56. package/lib/config/services/php/extensions/index.js +9 -8
  57. package/lib/config/services/php/extensions/intl.js +3 -5
  58. package/lib/config/services/php/extensions/opcache.js +3 -5
  59. package/lib/config/services/php/extensions/pdo_mysql.js +2 -2
  60. package/lib/config/services/php/extensions/soap.js +3 -5
  61. package/lib/config/services/php/extensions/sodium.js +3 -5
  62. package/lib/config/services/php/extensions/xdebug.js +5 -3
  63. package/lib/config/services/php/extensions/xsl.js +3 -5
  64. package/lib/config/services/php/extensions/zip.js +3 -5
  65. package/lib/config/services/php/versions/index.js +1 -1
  66. package/lib/config/services/php/versions/php-7.2.js +13 -9
  67. package/lib/config/services/php/versions/php-7.3.js +13 -9
  68. package/lib/config/services/php/versions/php-7.4.js +13 -9
  69. package/lib/config/services/php/versions/php-8.1.js +13 -9
  70. package/lib/config/services/redis/index.js +1 -1
  71. package/lib/config/services/redis/redis-5.0.js +2 -2
  72. package/lib/config/services/redis/redis-6.0.js +2 -2
  73. package/lib/config/services/redis/redis-6.2.js +2 -2
  74. package/lib/config/services/ssl-terminator/index.js +6 -5
  75. package/lib/config/services/varnish/index.js +1 -1
  76. package/lib/config/services/varnish/varnish-6-0.js +7 -5
  77. package/lib/config/services/varnish/varnish-6-6.js +7 -5
  78. package/lib/config/services/varnish/varnish-7-0.js +7 -5
  79. package/lib/config/system-config.js +55 -32
  80. package/lib/config/templates/mariadb.template.cnf +8 -0
  81. package/lib/config/versions/index.js +48 -27
  82. package/lib/config/versions/magento-2.2.10.js +22 -15
  83. package/lib/config/versions/magento-2.3.0.js +22 -15
  84. package/lib/config/versions/magento-2.3.1.js +22 -15
  85. package/lib/config/versions/magento-2.3.2-p1.js +22 -15
  86. package/lib/config/versions/magento-2.3.2-p2.js +22 -15
  87. package/lib/config/versions/magento-2.3.2.js +22 -15
  88. package/lib/config/versions/magento-2.3.3-p1.js +22 -15
  89. package/lib/config/versions/magento-2.3.3.js +22 -15
  90. package/lib/config/versions/magento-2.3.4-p1.js +22 -15
  91. package/lib/config/versions/magento-2.3.4-p2.js +22 -15
  92. package/lib/config/versions/magento-2.3.4.js +22 -15
  93. package/lib/config/versions/magento-2.3.5-p1.js +22 -15
  94. package/lib/config/versions/magento-2.3.5-p2.js +22 -15
  95. package/lib/config/versions/magento-2.3.5.js +27 -15
  96. package/lib/config/versions/magento-2.3.6-p1.js +22 -15
  97. package/lib/config/versions/magento-2.3.6.js +22 -15
  98. package/lib/config/versions/magento-2.3.7-p1.js +22 -15
  99. package/lib/config/versions/magento-2.3.7-p2.js +22 -15
  100. package/lib/config/versions/magento-2.3.7-p3.js +22 -15
  101. package/lib/config/versions/magento-2.3.7-p4.js +22 -15
  102. package/lib/config/versions/magento-2.3.7.js +22 -15
  103. package/lib/config/versions/magento-2.4.0-p1.js +22 -15
  104. package/lib/config/versions/magento-2.4.0.js +22 -15
  105. package/lib/config/versions/magento-2.4.1-p1.js +23 -16
  106. package/lib/config/versions/magento-2.4.1.js +23 -16
  107. package/lib/config/versions/magento-2.4.2-p1.js +23 -16
  108. package/lib/config/versions/magento-2.4.2-p2.js +23 -16
  109. package/lib/config/versions/magento-2.4.2.js +23 -16
  110. package/lib/config/versions/magento-2.4.3-p1.js +23 -16
  111. package/lib/config/versions/magento-2.4.3-p2.js +23 -16
  112. package/lib/config/versions/magento-2.4.3-p3.js +23 -16
  113. package/lib/config/versions/magento-2.4.3.js +23 -16
  114. package/lib/config/versions/magento-2.4.4-p1.js +23 -16
  115. package/lib/config/versions/magento-2.4.4-p2.js +23 -16
  116. package/lib/config/versions/magento-2.4.4.js +23 -16
  117. package/lib/config/versions/magento-2.4.5-p1.js +23 -16
  118. package/lib/config/versions/magento-2.4.5.js +23 -17
  119. package/lib/config/xml-parser.js +21 -20
  120. package/lib/errors/known-error.js +8 -6
  121. package/lib/errors/unknown-error.js +8 -6
  122. package/lib/tasks/cache/create-cache-folder.js +10 -10
  123. package/lib/tasks/cache/index.js +1 -1
  124. package/lib/tasks/cache/remove-cache-folder.js +9 -9
  125. package/lib/tasks/cleanup.js +22 -24
  126. package/lib/tasks/cli/create-bashrc-config.js +19 -11
  127. package/lib/tasks/cli/index.js +10 -13
  128. package/lib/tasks/composer/index.js +20 -15
  129. package/lib/tasks/composer/local-auth-json.js +32 -18
  130. package/lib/tasks/database/connect-to-database.js +71 -51
  131. package/lib/tasks/database/create-magento-database.js +7 -7
  132. package/lib/tasks/database/create-magento-user.js +33 -20
  133. package/lib/tasks/database/default-magento-database.js +1 -1
  134. package/lib/tasks/database/default-magento-user.js +2 -2
  135. package/lib/tasks/database/dump-theme-config.js +16 -12
  136. package/lib/tasks/database/fix-db.js +62 -52
  137. package/lib/tasks/database/import-dump-to-database.js +122 -85
  138. package/lib/tasks/database/import-remote-db/index.js +16 -18
  139. package/lib/tasks/database/import-remote-db/ssh/database-dump-command.js +2 -2
  140. package/lib/tasks/database/import-remote-db/ssh/index.js +34 -35
  141. package/lib/tasks/database/import-remote-db/ssh/readymage.js +41 -38
  142. package/lib/tasks/database/import-remote-db/ssh/regular-server.js +44 -46
  143. package/lib/tasks/database/index.js +1 -1
  144. package/lib/tasks/database/magento-tables.js +3 -3
  145. package/lib/tasks/database/restore-theme-config.js +26 -19
  146. package/lib/tasks/docker/api.d.ts +1 -1
  147. package/lib/tasks/docker/api.js +31 -33
  148. package/lib/tasks/docker/containers/container-api.d.ts +49 -14
  149. package/lib/tasks/docker/containers/container-api.js +112 -83
  150. package/lib/tasks/docker/containers/index.js +3 -3
  151. package/lib/tasks/docker/containers/tasks.js +171 -99
  152. package/lib/tasks/docker/convert-composer-home-to-composer-cache-volume.js +34 -25
  153. package/lib/tasks/docker/convert-legacy-volumes.js +91 -55
  154. package/lib/tasks/docker/convert-mysql-to-mariadb.js +178 -147
  155. package/lib/tasks/docker/image/image-api.d.ts +2 -3
  156. package/lib/tasks/docker/image/image-api.js +41 -34
  157. package/lib/tasks/docker/image/index.js +2 -2
  158. package/lib/tasks/docker/index.js +26 -21
  159. package/lib/tasks/docker/network/index.js +3 -3
  160. package/lib/tasks/docker/network/network-api.d.ts +11 -8
  161. package/lib/tasks/docker/network/network-api.js +53 -61
  162. package/lib/tasks/docker/network/tasks.js +41 -31
  163. package/lib/tasks/docker/project-image-builder.js +175 -92
  164. package/lib/tasks/docker/system/index.js +2 -2
  165. package/lib/tasks/docker/system/system-api.d.ts +2 -2
  166. package/lib/tasks/docker/system/system-api.js +16 -19
  167. package/lib/tasks/docker/volume/index.js +3 -3
  168. package/lib/tasks/docker/volume/tasks.js +63 -46
  169. package/lib/tasks/docker/volume/volume-api.d.ts +8 -5
  170. package/lib/tasks/docker/volume/volume-api.js +59 -76
  171. package/lib/tasks/execute.js +91 -55
  172. package/lib/tasks/file-system/create-mariadb-config.js +26 -11
  173. package/lib/tasks/file-system/create-nginx-config.js +18 -19
  174. package/lib/tasks/file-system/create-php-config.js +12 -8
  175. package/lib/tasks/file-system/create-php-debug-config.js +23 -18
  176. package/lib/tasks/file-system/create-php-fpm-config.js +14 -9
  177. package/lib/tasks/file-system/create-phpstorm-config/database-config.js +144 -112
  178. package/lib/tasks/file-system/create-phpstorm-config/eslint-config.js +69 -45
  179. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +69 -70
  180. package/lib/tasks/file-system/create-phpstorm-config/index.js +28 -24
  181. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/coding-standard-config.js +9 -9
  182. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/config.js +23 -23
  183. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/custom-ruleset-path-config.js +22 -19
  184. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/default-properties-config.js +26 -16
  185. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/eslint-inspection-config.js +14 -15
  186. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/index.js +43 -34
  187. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/inspection-tools-config.js +14 -6
  188. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/magento-coding-standard-config.js +9 -9
  189. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/mess-detector-validation-inspection-config.js +53 -47
  190. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/paths.js +41 -12
  191. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-fixer-validation-inspection-config.js +33 -30
  192. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-validation-inspection-config.js +35 -38
  193. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/stylelint-inspection-config.js +14 -15
  194. package/lib/tasks/file-system/create-phpstorm-config/keys.js +10 -10
  195. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +33 -25
  196. package/lib/tasks/file-system/create-phpstorm-config/php-config/mess-detector-config.js +28 -25
  197. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-code-sniffer-config.js +53 -32
  198. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +7 -7
  199. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-cs-fixer-config.js +37 -27
  200. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +53 -31
  201. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-project-shared-configuration-config.js +42 -30
  202. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +33 -20
  203. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +3 -3
  204. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +27 -16
  205. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +14 -13
  206. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +52 -34
  207. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +41 -33
  208. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/format-setting-config.js +39 -27
  209. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +34 -30
  210. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +32 -22
  211. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +32 -22
  212. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +32 -22
  213. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +42 -31
  214. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +45 -33
  215. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +32 -22
  216. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +22 -19
  217. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/properties-component-config.js +35 -21
  218. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +31 -22
  219. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/run-manager-config.js +38 -28
  220. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +5 -5
  221. package/lib/tasks/file-system/create-phpstorm-config/xml-utils.js +3 -2
  222. package/lib/tasks/file-system/create-ssl-terminator-config.js +46 -34
  223. package/lib/tasks/file-system/create-varnish-config.js +20 -23
  224. package/lib/tasks/file-system/create-vscode-config.js +66 -49
  225. package/lib/tasks/file-system/index.js +29 -25
  226. package/lib/tasks/import-dump.js +54 -45
  227. package/lib/tasks/link.js +24 -23
  228. package/lib/tasks/magento/enable-magento-composer-plugins.js +213 -149
  229. package/lib/tasks/magento/index.js +1 -1
  230. package/lib/tasks/magento/install-magento-project.js +158 -97
  231. package/lib/tasks/magento/remove-magento.js +30 -24
  232. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +27 -15
  233. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +23 -10
  234. package/lib/tasks/magento/setup-magento/create-admin.js +21 -13
  235. package/lib/tasks/magento/setup-magento/delete-admin-users.js +5 -5
  236. package/lib/tasks/magento/setup-magento/delete-customers.js +16 -10
  237. package/lib/tasks/magento/setup-magento/delete-orders.js +16 -10
  238. package/lib/tasks/magento/setup-magento/disable-2fa.js +11 -8
  239. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +7 -7
  240. package/lib/tasks/magento/setup-magento/disable-page-builder.js +5 -4
  241. package/lib/tasks/magento/setup-magento/flush-redis-config.js +14 -8
  242. package/lib/tasks/magento/setup-magento/increase-admin-session-lifetime.js +21 -17
  243. package/lib/tasks/magento/setup-magento/index-products.js +4 -6
  244. package/lib/tasks/magento/setup-magento/index.js +54 -47
  245. package/lib/tasks/magento/setup-magento/install-magento.js +112 -79
  246. package/lib/tasks/magento/setup-magento/migrate-database.js +115 -96
  247. package/lib/tasks/magento/setup-magento/set-base-url.js +35 -21
  248. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +15 -13
  249. package/lib/tasks/magento/setup-magento/set-mail-config.js +20 -14
  250. package/lib/tasks/magento/setup-magento/set-url-rewrite.js +13 -9
  251. package/lib/tasks/magento/setup-magento/upgrade-magento.js +30 -22
  252. package/lib/tasks/magento/setup-magento/urn-highlighter.js +11 -11
  253. package/lib/tasks/magento/setup-magento/varnish-config.js +42 -32
  254. package/lib/tasks/magento/setup-magento/waiting-for-redis.js +6 -8
  255. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +108 -65
  256. package/lib/tasks/magento/uninstall-magento.js +19 -16
  257. package/lib/tasks/php/php-container.d.ts +19 -0
  258. package/lib/tasks/php/php-container.js +50 -46
  259. package/lib/tasks/php/update-env-php.js +50 -30
  260. package/lib/tasks/project-config/index.js +12 -8
  261. package/lib/tasks/requirements/composer-credentials.js +215 -112
  262. package/lib/tasks/requirements/docker/context.js +49 -37
  263. package/lib/tasks/requirements/docker/index.js +123 -89
  264. package/lib/tasks/requirements/docker/install-on-mac.js +21 -14
  265. package/lib/tasks/requirements/docker/install.js +63 -52
  266. package/lib/tasks/requirements/docker/performance.js +39 -24
  267. package/lib/tasks/requirements/docker/permissions.js +27 -17
  268. package/lib/tasks/requirements/docker/running-status.js +79 -66
  269. package/lib/tasks/requirements/docker/version.js +15 -11
  270. package/lib/tasks/requirements/index.js +33 -29
  271. package/lib/tasks/requirements/node-version.js +8 -8
  272. package/lib/tasks/requirements/php-version.js +14 -11
  273. package/lib/tasks/requirements/platform.js +42 -26
  274. package/lib/tasks/requirements/rosetta.js +15 -12
  275. package/lib/tasks/start.js +172 -148
  276. package/lib/tasks/status/index.js +155 -88
  277. package/lib/tasks/stop.js +22 -18
  278. package/lib/tasks/theme/build-theme.js +50 -33
  279. package/lib/tasks/theme/install-theme.js +31 -18
  280. package/lib/tasks/theme/link-theme.js +27 -21
  281. package/lib/tasks/theme/retrieve-theme-data.js +24 -18
  282. package/lib/tasks/theme/setup-themes.js +87 -59
  283. package/lib/tasks/theme/symlink-theme.js +44 -22
  284. package/lib/util/CSA-theme.js +23 -21
  285. package/lib/util/analytics.js +130 -75
  286. package/lib/util/arch.js +22 -18
  287. package/lib/util/clean-object.js +15 -10
  288. package/lib/util/config-file-validator.js +74 -55
  289. package/lib/util/config-php-json.js +34 -16
  290. package/lib/util/connection-string.js +41 -27
  291. package/lib/util/console-block.js +112 -65
  292. package/lib/util/database.js +56 -33
  293. package/lib/util/deepmerge.d.ts +1 -1
  294. package/lib/util/deepmerge.js +19 -28
  295. package/lib/util/dockerfile-builder/build-instructions.js +159 -143
  296. package/lib/util/dockerfile-builder/index.js +47 -73
  297. package/lib/util/dockerfile-builder/types.d.ts +2 -1
  298. package/lib/util/download-file.js +28 -16
  299. package/lib/util/env-php-json.js +42 -16
  300. package/lib/util/exec-async-command.d.ts +9 -9
  301. package/lib/util/exec-async-command.js +82 -59
  302. package/lib/util/exec-async.d.ts +2 -0
  303. package/lib/util/exec-async.js +12 -5
  304. package/lib/util/execute-in-container.js +22 -27
  305. package/lib/util/execute-sudo-command.js +11 -15
  306. package/lib/util/get-brew-bin-path.js +27 -23
  307. package/lib/util/get-installed-magento-version.js +22 -16
  308. package/lib/util/get-jsonfile-data.js +14 -9
  309. package/lib/util/install-dependencies-task.js +53 -41
  310. package/lib/util/instance-metadata.js +44 -29
  311. package/lib/util/ip.js +16 -12
  312. package/lib/util/is-running-root.js +6 -3
  313. package/lib/util/is-wsl.js +10 -10
  314. package/lib/util/macos-version.js +12 -11
  315. package/lib/util/magento-task.js +14 -9
  316. package/lib/util/match-filesystem.js +22 -16
  317. package/lib/util/move-file.js +40 -25
  318. package/lib/util/nginx-logs-parser.js +50 -39
  319. package/lib/util/open-browser.js +10 -5
  320. package/lib/util/os-platform.js +40 -32
  321. package/lib/util/path-exists-sync.js +10 -6
  322. package/lib/util/path-exists.js +6 -6
  323. package/lib/util/php-task.js +11 -10
  324. package/lib/util/portscanner.js +97 -85
  325. package/lib/util/prefix.js +31 -22
  326. package/lib/util/resolve-configuration-with-overrides.js +30 -15
  327. package/lib/util/rmdir-safe.js +15 -11
  328. package/lib/util/run-composer.js +16 -16
  329. package/lib/util/run-container-image.js +9 -4
  330. package/lib/util/run-magento.js +16 -17
  331. package/lib/util/run-php.js +16 -21
  332. package/lib/util/safe-regex-extract.js +8 -12
  333. package/lib/util/set-config.js +24 -15
  334. package/lib/util/sleep.js +7 -2
  335. package/lib/util/systemctl.js +62 -44
  336. package/lib/util/wait-for-it.js +42 -33
  337. package/lib/util/wait-for-logs.js +42 -35
  338. package/lib/util/xdg-open-exists.js +19 -19
  339. package/package.json +7 -3
  340. package/tsconfig.json +24 -0
  341. package/typings/context.d.ts +76 -34
  342. package/typings/index.d.ts +54 -20
  343. package/typings/override.d.ts +14 -0
  344. package/typings/phpstorm.d.ts +19 -19
  345. package/.prettierrc +0 -3
  346. package/lib/util/get-php-for-phpbrew.js +0 -30
  347. package/lib/util/request.js +0 -0
@@ -1,5 +1,8 @@
1
- const os = require('os');
1
+ const os = require('os')
2
2
 
3
- const isRunningRoot = () => ['linux', 'darwin'].includes(os.platform()) && process.getuid() === 0; // UID 0 is always root
3
+ const isRunningRoot = () =>
4
+ ['linux', 'darwin'].includes(os.platform()) &&
5
+ process.getuid &&
6
+ process.getuid() === 0 // UID 0 is always root
4
7
 
5
- module.exports = isRunningRoot;
8
+ module.exports = isRunningRoot
@@ -1,5 +1,5 @@
1
- const os = require('os');
2
- const fs = require('fs');
1
+ const os = require('os')
2
+ const fs = require('fs')
3
3
 
4
4
  /**
5
5
  * Checks if process is running in wsl mode
@@ -7,24 +7,24 @@ const fs = require('fs');
7
7
  */
8
8
  const getIsWsl = async () => {
9
9
  if (process.platform !== 'linux') {
10
- return false;
10
+ return false
11
11
  }
12
12
 
13
13
  if (typeof process.env.WSL_DISTRO_NAME === 'string') {
14
- return true;
14
+ return true
15
15
  }
16
16
 
17
17
  if (os.release().toLowerCase().includes('microsoft')) {
18
- return true;
18
+ return true
19
19
  }
20
20
 
21
21
  try {
22
- const procVersion = await fs.promises.readFile('/proc/version', 'utf8');
22
+ const procVersion = await fs.promises.readFile('/proc/version', 'utf8')
23
23
 
24
- return procVersion.toLowerCase().includes('microsoft');
24
+ return procVersion.toLowerCase().includes('microsoft')
25
25
  } catch (e) {
26
- return false;
26
+ return false
27
27
  }
28
- };
28
+ }
29
29
 
30
- module.exports = getIsWsl;
30
+ module.exports = getIsWsl
@@ -1,20 +1,21 @@
1
- const semver = require('semver');
2
- const macosVersion = require('macos-version');
3
- const { execAsyncSpawn } = require('./exec-async-command');
1
+ const semver = require('semver')
2
+ const macosVersion = require('macos-version')
3
+ const { execAsyncSpawn } = require('./exec-async-command')
4
4
 
5
5
  const getMacOSVersion = async () => {
6
- const { code, result } = await execAsyncSpawn('sw_vers -productVersion',
7
- {
8
- withCode: true
9
- });
6
+ const { code, result } = await execAsyncSpawn('sw_vers -productVersion', {
7
+ withCode: true
8
+ })
10
9
 
11
10
  if (code !== 0) {
12
- return macosVersion();
11
+ return macosVersion()
13
12
  }
14
13
 
15
- return semver.coerce(result).version;
16
- };
14
+ const { version } = semver.coerce(result) || {}
15
+
16
+ return version
17
+ }
17
18
 
18
19
  module.exports = {
19
20
  getMacOSVersion
20
- };
21
+ }
@@ -1,4 +1,5 @@
1
- const runMagentoCommand = require('./run-magento');
1
+ const UnknownError = require('../errors/unknown-error')
2
+ const runMagentoCommand = require('./run-magento')
2
3
 
3
4
  /**
4
5
  * @param {String} command
@@ -11,20 +12,24 @@ const magentoTask = (command, options = {}) => ({
11
12
  task: async (ctx, task) => {
12
13
  try {
13
14
  await runMagentoCommand(ctx, command, {
14
- callback: !ctx.verbose ? undefined : (t) => {
15
- task.output = t;
16
- },
15
+ callback: !ctx.verbose
16
+ ? undefined
17
+ : (t) => {
18
+ task.output = t
19
+ },
17
20
  throwNonZeroCode: true
18
- });
21
+ })
19
22
  } catch (e) {
20
- if (options.onError) {
21
- options.onError(e);
23
+ if (e instanceof UnknownError && options.onError) {
24
+ options.onError(e)
22
25
  }
26
+
27
+ throw e
23
28
  }
24
29
  },
25
30
  options: {
26
31
  bottomBar: 10
27
32
  }
28
- });
33
+ })
29
34
 
30
- module.exports = magentoTask;
35
+ module.exports = magentoTask
@@ -1,5 +1,5 @@
1
- const path = require('path');
2
- const pathExists = require('./path-exists');
1
+ const path = require('path')
2
+ const pathExists = require('./path-exists')
3
3
 
4
4
  /**
5
5
  * Check file system structure to detect possible unfinished installation
@@ -9,25 +9,31 @@ const pathExists = require('./path-exists');
9
9
  */
10
10
  const matchFilesystem = async (cwd, structure) => {
11
11
  if (Array.isArray(structure)) {
12
- const ok = (await Promise.all(structure.map((str) => pathExists(path.join(cwd, str)))))
13
- .every((value) => value === true);
12
+ const ok = (
13
+ await Promise.all(
14
+ structure.map((str) => pathExists(path.join(cwd, str)))
15
+ )
16
+ ).every((value) => value === true)
14
17
 
15
- return ok;
18
+ return ok
16
19
  }
17
20
  if (typeof structure === 'object') {
18
- const ok = (await Promise.all(Object.entries(structure).map(([key, value]) => {
19
- if (typeof value === 'boolean') {
20
- return pathExists(path.join(cwd, key));
21
- }
21
+ const ok = (
22
+ await Promise.all(
23
+ Object.entries(structure).map(([key, value]) => {
24
+ if (typeof value === 'boolean') {
25
+ return pathExists(path.join(cwd, key))
26
+ }
22
27
 
23
- return matchFilesystem(path.join(cwd, key), value);
24
- })))
25
- .every((value) => value === true);
28
+ return matchFilesystem(path.join(cwd, key), value)
29
+ })
30
+ )
31
+ ).every((value) => value === true)
26
32
 
27
- return ok;
33
+ return ok
28
34
  }
29
35
 
30
- return pathExists(path.join(cwd, structure));
31
- };
36
+ return pathExists(path.join(cwd, structure))
37
+ }
32
38
 
33
- module.exports = matchFilesystem;
39
+ module.exports = matchFilesystem
@@ -1,38 +1,53 @@
1
- const fs = require('fs');
1
+ const fs = require('fs')
2
2
 
3
+ /**
4
+ * @param {{ from: string, to: string }} param0
5
+ */
3
6
  const moveFile = async ({ from, to }) => {
4
- const copy = () => new Promise((resolve, reject) => {
5
- const readStream = fs.createReadStream(from);
6
- const writeStream = fs.createWriteStream(to);
7
- const onError = async (e) => {
8
- await fs.promises.unlink(to);
9
- reject(e);
10
- };
7
+ /**
8
+ * @returns {Promise<void>}
9
+ */
10
+ const copy = () =>
11
+ new Promise((resolve, reject) => {
12
+ const readStream = fs.createReadStream(from)
13
+ const writeStream = fs.createWriteStream(to)
14
+ /**
15
+ * @param {Error} e
16
+ */
17
+ const onError = async (e) => {
18
+ await fs.promises.unlink(to)
19
+ reject(e)
20
+ }
11
21
 
12
- readStream.on('error', onError);
13
- writeStream.on('error', onError);
22
+ readStream.on('error', onError)
23
+ writeStream.on('error', onError)
14
24
 
15
- readStream.on('close', async () => {
16
- try {
17
- await fs.promises.unlink(from);
18
- } catch (e) {
19
- onError(e);
20
- }
21
- resolve();
22
- });
25
+ readStream.on('close', async () => {
26
+ try {
27
+ await fs.promises.unlink(from)
28
+ } catch (e) {
29
+ if (e instanceof Error) {
30
+ onError(e)
31
+ return
32
+ } else if (typeof e === 'string') {
33
+ onError(new Error(e))
34
+ }
35
+ }
36
+ resolve()
37
+ })
23
38
 
24
- readStream.pipe(writeStream);
25
- });
39
+ readStream.pipe(writeStream)
40
+ })
26
41
 
27
42
  try {
28
- await fs.promises.rename(from, to);
43
+ await fs.promises.rename(from, to)
29
44
  } catch (e) {
30
45
  if (e && e.code === 'EXDEV') {
31
- await copy();
46
+ await copy()
32
47
  } else {
33
- throw e;
48
+ throw e
34
49
  }
35
50
  }
36
- };
51
+ }
37
52
 
38
- module.exports = moveFile;
53
+ module.exports = moveFile
@@ -1,52 +1,62 @@
1
- /* eslint-disable no-bitwise */
2
- /* eslint-disable max-len */
1
+ /**
2
+ * @typedef {{ date: Date | null, timestamp: number | null, ip: number | null } & Record<string, string | null>} LogRow
3
+ */
4
+
3
5
  class NginxParser {
6
+ /**
7
+ * @param {String} format
8
+ */
4
9
  constructor(format) {
5
- this.directives = {};
10
+ /**
11
+ * @type {Record<string, number>}
12
+ */
13
+ this.directives = {}
6
14
 
7
- const prefix = format.match(/^[^$]*/);
15
+ const prefix = format.match(/^[^$]*/)
8
16
  if (prefix) {
9
- format = this.escape(prefix[0]) + format.slice(prefix[0].length);
17
+ format = this.escape(prefix[0]) + format.slice(prefix[0].length)
10
18
  }
11
19
 
12
- this.parser = format;
20
+ this.parser = format
13
21
 
14
- const directive = /\$([a-z_]+)(.)?([^$]+)?/g;
15
- let match;
16
- let regex;
17
- let boundary;
18
- let i = 1;
22
+ const directive = /\$([a-z_]+)(.)?([^$]+)?/g
23
+ let match
24
+ let regex
25
+ let boundary
26
+ let i = 1
19
27
 
20
- // eslint-disable-next-line no-cond-assign
21
28
  while ((match = directive.exec(format))) {
22
- this.directives[match[1]] = i++;
29
+ this.directives[match[1]] = i++
23
30
  if (match[2]) {
24
- boundary = this.escape(match[2]);
25
- regex = `([^${ boundary }]*?)${ boundary}`;
31
+ boundary = this.escape(match[2])
32
+ regex = `([^${boundary}]*?)${boundary}`
26
33
  if (match[3]) {
27
- regex += this.escape(match[3]);
34
+ regex += this.escape(match[3])
28
35
  }
29
36
  } else {
30
- regex = '(.+)$';
37
+ regex = '(.+)$'
31
38
  }
32
- this.parser = this.parser.replace(match[0], regex);
39
+ this.parser = this.parser.replace(match[0], regex)
33
40
  }
34
41
 
35
- this.parser = new RegExp(this.parser);
42
+ this.parser = new RegExp(this.parser)
36
43
  }
37
44
 
38
45
  /**
39
46
  * Parse a log line.
40
47
  *
41
48
  * @param {String} line
42
- * @returns {Record<'msec' | 'time_iso8601' | 'remote_addr' | 'query_string' | 'http_x_forwarded_for' | 'http_user_agent' | 'http_referer' | 'time_local' | 'request' | 'status' | 'request_time' | 'request_length' | 'pipe' | 'connection' | 'bytes_sent' | 'body_bytes_sent' | 'date' | 'timestamp' | 'ip' | 'ip_str', string>}
49
+ * @returns {LogRow | null}
43
50
  */
44
51
  parseLine(line) {
45
- const match = line.match(this.parser);
52
+ const match = line.match(this.parser)
46
53
  if (!match) {
47
- return;
54
+ return null
48
55
  }
49
56
 
57
+ /**
58
+ * @type {LogRow}
59
+ */
50
60
  const row = {
51
61
  msec: null,
52
62
  time_iso8601: null,
@@ -69,41 +79,41 @@ class NginxParser {
69
79
  timestamp: null,
70
80
  ip: null,
71
81
  ip_str: null
72
- };
82
+ }
73
83
 
74
- // eslint-disable-next-line guard-for-in
75
84
  for (const key in this.directives) {
76
- row[key] = match[this.directives[key]];
85
+ row[key] = match[this.directives[key]]
77
86
  if (row[key] === '-') {
78
- row[key] = null;
87
+ row[key] = null
79
88
  }
80
89
  }
81
90
 
82
91
  // Parse the timestamp
83
92
  if (row.time_iso8601) {
84
- row.date = new Date(row.time_iso8601);
93
+ row.date = new Date(row.time_iso8601)
85
94
  } else if (row.msec) {
86
- row.date = new Date(Number(row.msec.replace('.', '')));
95
+ row.date = new Date(Number(row.msec.replace('.', '')))
87
96
  }
88
97
  if (row.date) {
89
- row.timestamp = row.date.getTime();
98
+ row.timestamp = row.date.getTime()
90
99
  }
91
100
 
92
101
  // Parse the user's IP
93
102
  if (row.http_x_forwarded_for) {
94
- row.ip_str = row.http_x_forwarded_for;
103
+ row.ip_str = row.http_x_forwarded_for
95
104
  } else if (row.remote_addr) {
96
- row.ip_str = row.remote_addr;
105
+ row.ip_str = row.remote_addr
97
106
  }
98
107
  if (row.ip_str) {
99
- const ip = row.ip_str.split('.', 4);
100
- row.ip = Number(ip[0]) * (2 << 23)
101
- + Number(ip[1]) * (2 << 15)
102
- + Number(ip[2]) * (2 << 7)
103
- + Number(ip[3]);
108
+ const ip = row.ip_str.split('.', 4)
109
+ row.ip =
110
+ Number(ip[0]) * (2 << 23) +
111
+ Number(ip[1]) * (2 << 15) +
112
+ Number(ip[2]) * (2 << 7) +
113
+ Number(ip[3])
104
114
  }
105
115
 
106
- return row;
116
+ return row
107
117
  }
108
118
 
109
119
  /**
@@ -113,10 +123,11 @@ class NginxParser {
113
123
  * @return {String}
114
124
  */
115
125
  escape(str) {
116
- return str.replace(new RegExp('[.*+?|()\\[\\]{}]', 'g'), '\\$&');
126
+ // eslint-disable-next-line no-useless-escape
127
+ return str.replace(/[.*+?|()\[\]{}]/g, '\\$&')
117
128
  }
118
129
  }
119
130
 
120
131
  module.exports = {
121
132
  NginxParser
122
- };
133
+ }
@@ -1,9 +1,14 @@
1
- const { execAsync } = require('./exec-async');
1
+ const { execAsync } = require('./exec-async')
2
2
 
3
+ // eslint-disable-next-line no-control-regex
4
+ const consoleStyleReplacer = /[\u001b]\[\S+?m/g
5
+ /**
6
+ * @param {string} url
7
+ */
3
8
  const openBrowser = async (url) => {
4
- const start = process.platform === 'darwin' ? 'open' : 'xdg-open';
9
+ const start = process.platform === 'darwin' ? 'open' : 'xdg-open'
5
10
 
6
- await execAsync(`${ start } ${ url }`);
7
- };
11
+ await execAsync(`${start} ${url.replace(consoleStyleReplacer, '')}`)
12
+ }
8
13
 
9
- module.exports = openBrowser;
14
+ module.exports = openBrowser
@@ -1,51 +1,59 @@
1
- const fs = require('fs');
2
- const systeminformation = require('systeminformation');
3
- const pathExists = require('./path-exists');
4
- const dependenciesForPlatforms = require('../config/dependencies-for-platforms');
1
+ const fs = require('fs')
2
+ const systeminformation = require('systeminformation')
3
+ const pathExists = require('./path-exists')
4
+ const dependenciesForPlatforms = require('../config/dependencies-for-platforms')
5
5
 
6
6
  const packageManagers = Object.entries(dependenciesForPlatforms).map((d) => ({
7
7
  platform: d[0],
8
8
  packageManager: d[1].packageManager
9
- }));
9
+ }))
10
10
  /**
11
11
  *
12
12
  * @returns {Promise<keyof typeof dependenciesForPlatforms>}
13
13
  */
14
14
  const osPlatform = async () => {
15
- const binPaths = process.env.PATH.split(':');
15
+ const binPaths = process.env.PATH.split(':')
16
16
 
17
- const platforms = await Promise.all(binPaths.map(async (binPath) => {
18
- if (!await pathExists(binPath)) {
19
- return null;
20
- }
21
- const bins = await fs.promises.readdir(binPath);
22
-
23
- for (const bin of bins) {
24
- const possiblePlatforms = packageManagers.filter((p) => p.packageManager === bin);
17
+ const platforms = (
18
+ await Promise.all(
19
+ binPaths.map(async (binPath) => {
20
+ if (!(await pathExists(binPath))) {
21
+ return null
22
+ }
23
+ const bins = await fs.promises.readdir(binPath)
25
24
 
26
- if (possiblePlatforms.length > 0) {
27
- if (possiblePlatforms.length > 1) {
28
- const { distro } = await systeminformation.osInfo();
25
+ for (const bin of bins) {
26
+ const possiblePlatforms = packageManagers.filter(
27
+ (p) => p.packageManager === bin
28
+ )
29
29
 
30
- const foundDistro = possiblePlatforms.find((p) => p.platform.toLowerCase().includes(distro.toLowerCase()));
30
+ if (possiblePlatforms.length > 0) {
31
+ if (possiblePlatforms.length > 1) {
32
+ const { distro } = await systeminformation.osInfo()
31
33
 
32
- if (foundDistro) {
33
- return foundDistro.platform;
34
- }
34
+ const foundDistro = possiblePlatforms.find((p) =>
35
+ p.platform
36
+ .toLowerCase()
37
+ .includes(distro.toLowerCase())
38
+ )
35
39
 
36
- return possiblePlatforms[0].platform;
37
- }
40
+ if (foundDistro) {
41
+ return foundDistro.platform
42
+ }
38
43
 
39
- return possiblePlatforms[0].platform;
40
- }
41
- }
44
+ return possiblePlatforms[0].platform
45
+ }
42
46
 
43
- return null;
44
- }));
47
+ return possiblePlatforms[0].platform
48
+ }
49
+ }
45
50
 
46
- const filteredPlatforms = platforms.filter(Boolean);
51
+ return null
52
+ })
53
+ )
54
+ ).filter(Boolean)
47
55
 
48
- return filteredPlatforms.shift();
49
- };
56
+ return platforms.shift()
57
+ }
50
58
 
51
- module.exports = osPlatform;
59
+ module.exports = osPlatform
@@ -1,13 +1,17 @@
1
- const fs = require('fs');
1
+ const fs = require('fs')
2
2
 
3
+ /**
4
+ * @param {string} path
5
+ * @returns {boolean}
6
+ */
3
7
  const pathExistsSync = (path) => {
4
8
  try {
5
- fs.accessSync(path, fs.constants.F_OK);
9
+ fs.accessSync(path, fs.constants.F_OK)
6
10
  } catch (e) {
7
- return false;
11
+ return false
8
12
  }
9
13
 
10
- return true;
11
- };
14
+ return true
15
+ }
12
16
 
13
- module.exports = pathExistsSync;
17
+ module.exports = pathExistsSync
@@ -1,4 +1,4 @@
1
- const fs = require('fs');
1
+ const fs = require('fs')
2
2
 
3
3
  /**
4
4
  * Check if provided path exists in filesystem
@@ -7,12 +7,12 @@ const fs = require('fs');
7
7
  */
8
8
  const pathExists = async (path) => {
9
9
  try {
10
- await fs.promises.access(path, fs.constants.F_OK);
10
+ await fs.promises.access(path, fs.constants.F_OK)
11
11
  } catch (e) {
12
- return false;
12
+ return false
13
13
  }
14
14
 
15
- return true;
16
- };
15
+ return true
16
+ }
17
17
 
18
- module.exports = pathExists;
18
+ module.exports = pathExists
@@ -1,18 +1,19 @@
1
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
1
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
2
2
 
3
3
  /**
4
4
  * @param {String} command
5
- * @param {{ noTitle: boolean, env: Record<string, string> }} options
5
+ * @param {{ noTitle?: boolean, env?: Record<string, string> }} [options]
6
6
  * @returns {import('listr2').ListrTask<import('../../typings/context').ListrContext>}
7
7
  */
8
8
  const phpTask = (command, options = {}) => ({
9
9
  title: !options.noTitle ? `Running command 'php ${command}` : undefined,
10
- task: (ctx, task) => runPHPContainerCommand(ctx, command, {
11
- callback: (t) => {
12
- task.output = t;
13
- },
14
- throwNonZeroCode: true
15
- })
16
- });
10
+ task: (ctx, task) =>
11
+ runPHPContainerCommand(ctx, command, {
12
+ callback: (t) => {
13
+ task.output = t
14
+ },
15
+ withCode: true
16
+ })
17
+ })
17
18
 
18
- module.exports = phpTask;
19
+ module.exports = phpTask