@scandipwa/magento-scripts 2.0.3 → 2.0.4

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 -157
  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 +3 -3
  47. package/lib/config/services/mariadb/versions/mariadb-10.3.js +3 -3
  48. package/lib/config/services/mariadb/versions/mariadb-10.4.js +3 -3
  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 +2 -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 +18 -10
  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 +40 -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 +14 -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 +63 -54
  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 +8 -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 +44 -19
  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,21 +1,25 @@
1
- const { setProjectConfig } = require('../../config/config');
2
- const { setPrefix: setPrefixUtil } = require('../../util/prefix');
1
+ const { setProjectConfig } = require('../../config/config')
2
+ const { setPrefix: setPrefixUtil } = require('../../util/prefix')
3
3
 
4
4
  /**
5
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
5
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
6
6
  */
7
7
  const setProjectConfigTask = () => ({
8
8
  title: 'Settings project config',
9
9
  task: (ctx) => {
10
- const { config: { overridenConfiguration: { prefix } } } = ctx;
10
+ const {
11
+ config: {
12
+ overridenConfiguration: { prefix }
13
+ }
14
+ } = ctx
11
15
 
12
- setPrefixUtil(prefix);
16
+ setPrefixUtil(prefix)
13
17
 
14
- setProjectConfig('debug', ctx.debug);
18
+ setProjectConfig('debug', ctx.debug)
15
19
  },
16
20
  options: {
17
21
  showTimer: false
18
22
  }
19
- });
23
+ })
20
24
 
21
- module.exports = { setProjectConfigTask };
25
+ module.exports = { setProjectConfigTask }
@@ -1,46 +1,58 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  /* eslint-disable no-nested-ternary */
2
- const path = require('path');
3
- const fs = require('fs');
4
- const os = require('os');
5
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
6
- const pathExists = require('../../util/path-exists');
7
- const KnownError = require('../../errors/known-error');
8
- const UnknownError = require('../../errors/unknown-error');
3
+ const path = require('path')
4
+ const fs = require('fs')
5
+ const os = require('os')
6
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
7
+ const pathExists = require('../../util/path-exists')
8
+ const KnownError = require('../../errors/known-error')
9
+ const UnknownError = require('../../errors/unknown-error')
9
10
 
10
- const authJsonPath = path.join(process.cwd(), 'auth.json');
11
- const shellName = process.env.SHELL.split('/').pop();
12
- const shellConfigFileName = `.${shellName}rc`;
13
- const shellConfigFilePath = path.join(os.homedir(), shellConfigFileName);
11
+ const authJsonPath = path.join(process.cwd(), 'auth.json')
12
+ const shellName = process.env.SHELL.split('/').pop()
13
+ const shellConfigFileName = `.${shellName}rc`
14
+ const shellConfigFilePath = path.join(os.homedir(), shellConfigFileName)
14
15
 
15
- const pasteKeybinding = process.platform === 'darwin' ? 'CMD + V' : 'CTRL + SHIFT + V';
16
+ const pasteKeybinding =
17
+ process.platform === 'darwin' ? 'CMD + V' : 'CTRL + SHIFT + V'
16
18
 
17
- const MISSING_COMPOSER_AUTH_ENV = 'missing composer auth environment variable';
18
- const MISSING_AUTH_JSON = 'missing auth.json file';
19
+ const MISSING_COMPOSER_AUTH_ENV = 'missing composer auth environment variable'
20
+ const MISSING_AUTH_JSON = 'missing auth.json file'
19
21
 
20
22
  /**
21
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
23
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
22
24
  */
23
25
  const configureComposerCredentials = () => ({
24
26
  title: 'Configuring Composer Credentials',
25
27
  task: async (ctx, task) => {
26
28
  const configureLocation = await task.prompt({
27
29
  type: 'Select',
28
- message: `We didn't find Composer credentials in your ${ logger.style.misc('$COMPOSER_AUTH') } environment variable or in your ${ logger.style.file('./auth.json') } file.
30
+ message: `We didn't find Composer credentials in your ${logger.style.misc(
31
+ '$COMPOSER_AUTH'
32
+ )} environment variable or in your ${logger.style.file(
33
+ './auth.json'
34
+ )} file.
29
35
 
30
36
  Those credentials are required to install Magento.
31
37
 
32
38
  Where do you want to store them?`,
33
39
  choices: [
34
40
  {
35
- message: `Inside my projects directory in ${ logger.style.file('auth.json') } file [${ logger.style.misc('Recommended') }]`,
41
+ message: `Inside my projects directory in ${logger.style.file(
42
+ 'auth.json'
43
+ )} file [${logger.style.misc('Recommended')}]`,
36
44
  name: 'auth.json'
37
45
  },
38
46
  {
39
- message: `Inside my shells configuration file located in users home directory ${ logger.style.file(shellConfigFileName) } [${ logger.style.misc('Shared credentials, not recommended') }] `,
47
+ message: `Inside my shells configuration file located in users home directory ${logger.style.file(
48
+ shellConfigFileName
49
+ )} [${logger.style.misc(
50
+ 'Shared credentials, not recommended'
51
+ )}] `,
40
52
  name: 'shell'
41
53
  }
42
54
  ]
43
- });
55
+ })
44
56
 
45
57
  const usernameCredentials = await task.prompt({
46
58
  type: 'Input',
@@ -48,20 +60,26 @@ Where do you want to store them?`,
48
60
 
49
61
  You can obtain this key from Magento Marketplace
50
62
 
51
- 1. Go to ${ logger.style.link('https://marketplace.magento.com/customer/accessKeys/') }
52
- 2. Use created Access Keypair or click ${ logger.style.misc('Generate Access Keypair') } to generate new Access Keypair
53
- 3. Click ${ logger.style.misc('Copy') } on ${ logger.style.misc('Public key') } and paste it here (${logger.style.misc(pasteKeybinding)})
54
-
55
- ${ logger.style.misc('Username') } (${ logger.style.misc('Public key') }):`,
63
+ 1. Go to ${logger.style.link(
64
+ 'https://marketplace.magento.com/customer/accessKeys/'
65
+ )}
66
+ 2. Use created Access Keypair or click ${logger.style.misc(
67
+ 'Generate Access Keypair'
68
+ )} to generate new Access Keypair
69
+ 3. Click ${logger.style.misc('Copy')} on ${logger.style.misc(
70
+ 'Public key'
71
+ )} and paste it here (${logger.style.misc(pasteKeybinding)})
72
+
73
+ ${logger.style.misc('Username')} (${logger.style.misc('Public key')}):`,
56
74
  required: true,
57
75
  validate: (value) => {
58
76
  if (value.trim() === '') {
59
- return 'Username must not be empty';
77
+ return 'Username must not be empty'
60
78
  }
61
79
 
62
- return true;
80
+ return true
63
81
  }
64
- });
82
+ })
65
83
 
66
84
  const passwordCredentials = await task.prompt({
67
85
  type: 'Input',
@@ -69,22 +87,30 @@ ${ logger.style.misc('Username') } (${ logger.style.misc('Public key') }):`,
69
87
 
70
88
  You can obtain this key from Magento Marketplace
71
89
 
72
- 1. Go to ${ logger.style.link('https://marketplace.magento.com/customer/accessKeys/') }
73
- 2. Use created Access Keypair or click ${ logger.style.misc('Generate Access Keypair') } to generate new Access Keypair
74
- 3. Click ${ logger.style.misc('Copy') } on ${ logger.style.misc('Private key') } and paste it here (${logger.style.misc(pasteKeybinding)})
75
-
76
- ${ logger.style.comment('Make sure to use Private key from the same Keypair as your Public key!')}
77
-
78
- ${ logger.style.misc('Password') } (${ logger.style.misc('Private key') }):`,
90
+ 1. Go to ${logger.style.link(
91
+ 'https://marketplace.magento.com/customer/accessKeys/'
92
+ )}
93
+ 2. Use created Access Keypair or click ${logger.style.misc(
94
+ 'Generate Access Keypair'
95
+ )} to generate new Access Keypair
96
+ 3. Click ${logger.style.misc('Copy')} on ${logger.style.misc(
97
+ 'Private key'
98
+ )} and paste it here (${logger.style.misc(pasteKeybinding)})
99
+
100
+ ${logger.style.comment(
101
+ 'Make sure to use Private key from the same Keypair as your Public key!'
102
+ )}
103
+
104
+ ${logger.style.misc('Password')} (${logger.style.misc('Private key')}):`,
79
105
  required: true,
80
106
  validate: (value) => {
81
107
  if (value.trim() === '') {
82
- return 'Password must not be empty';
108
+ return 'Password must not be empty'
83
109
  }
84
110
 
85
- return true;
111
+ return true
86
112
  }
87
- });
113
+ })
88
114
 
89
115
  const authContent = {
90
116
  'http-basic': {
@@ -93,36 +119,46 @@ ${ logger.style.misc('Password') } (${ logger.style.misc('Private key') }):`,
93
119
  password: passwordCredentials.trim()
94
120
  }
95
121
  }
96
- };
122
+ }
97
123
 
98
- const authJsonContent = JSON.stringify(authContent, null, 4);
99
- const authEnvContent = `export COMPOSER_AUTH='${JSON.stringify(authContent, null, 0)}'`;
124
+ const authJsonContent = JSON.stringify(authContent, null, 4)
125
+ const authEnvContent = `export COMPOSER_AUTH='${JSON.stringify(
126
+ authContent,
127
+ null,
128
+ 0
129
+ )}'`
100
130
 
101
- process.env.COMPOSER_AUTH = JSON.stringify(JSON.parse(authJsonContent), null, 0);
131
+ process.env.COMPOSER_AUTH = JSON.stringify(
132
+ JSON.parse(authJsonContent),
133
+ null,
134
+ 0
135
+ )
102
136
 
103
137
  if (configureLocation === 'auth.json') {
104
- await fs.promises.writeFile(authJsonPath, authJsonContent, 'utf-8');
105
- return;
138
+ await fs.promises.writeFile(authJsonPath, authJsonContent, 'utf-8')
139
+ return
106
140
  }
107
141
 
108
142
  switch (shellName) {
109
- case 'bash':
110
- case 'zsh': {
111
- await fs.promises.appendFile(
112
- path.join(os.homedir(), shellConfigFileName),
113
- `\n${authEnvContent}\n`
114
- );
115
- break;
116
- }
117
- default: {
118
- throw new KnownError(
119
- `Unfortunately we cannot automatically add credentials for your shell ${process.env.SHELL}!
143
+ case 'bash':
144
+ case 'zsh': {
145
+ await fs.promises.appendFile(
146
+ path.join(os.homedir(), shellConfigFileName),
147
+ `\n${authEnvContent}\n`
148
+ )
149
+ break
150
+ }
151
+ default: {
152
+ throw new KnownError(
153
+ `Unfortunately we cannot automatically add credentials for your shell ${
154
+ process.env.SHELL
155
+ }!
120
156
 
121
157
  You will need to that manually!
122
158
 
123
- Add following string to your shell configuration file: ${ logger.style.code()}`
124
- );
125
- }
159
+ Add following string to your shell configuration file: ${logger.style.code()}`
160
+ )
161
+ }
126
162
  }
127
163
 
128
164
  await task.prompt({
@@ -131,92 +167,143 @@ Add following string to your shell configuration file: ${ logger.style.code()}`
131
167
 
132
168
  You selected to add your Magento credentials to your shell environment, you should know that shell configuration does not update automatically.
133
169
 
134
- To update it you can either restart your existing shell or run the following command to update the configuration temporarily: ${ logger.style.code('source <path/to/config/file>')}
170
+ To update it you can either restart your existing shell or run the following command to update the configuration temporarily: ${logger.style.code(
171
+ 'source <path/to/config/file>'
172
+ )}
135
173
 
136
- Press ${ logger.style.misc('Y') } to continue`
137
- });
174
+ Press ${logger.style.misc('Y')} to continue`
175
+ })
138
176
  }
139
- });
177
+ })
140
178
 
141
179
  /**
142
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
180
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
143
181
  */
144
182
  const checkComposerCredentials = () => ({
145
183
  title: 'Checking Composer credentials',
146
184
  task: async (ctx, task) => {
147
- const problems = new Map();
185
+ const problems = new Map()
148
186
  if (!process.env.COMPOSER_AUTH) {
149
- problems.set(MISSING_COMPOSER_AUTH_ENV, true);
187
+ problems.set(MISSING_COMPOSER_AUTH_ENV, true)
150
188
  }
151
189
 
152
- if (!await pathExists(authJsonPath)) {
153
- problems.set(MISSING_AUTH_JSON, true);
190
+ if (!(await pathExists(authJsonPath))) {
191
+ problems.set(MISSING_AUTH_JSON, true)
154
192
  }
155
193
 
156
- if (problems.has(MISSING_COMPOSER_AUTH_ENV) && problems.has(MISSING_AUTH_JSON)) {
157
- let doConfigure = true;
194
+ if (
195
+ problems.has(MISSING_COMPOSER_AUTH_ENV) &&
196
+ problems.has(MISSING_AUTH_JSON)
197
+ ) {
198
+ let doConfigure = true
158
199
  if (await pathExists(shellConfigFilePath)) {
159
- const rcFileContent = await fs.promises.readFile(shellConfigFilePath, 'utf-8');
200
+ const rcFileContent = await fs.promises.readFile(
201
+ shellConfigFilePath,
202
+ 'utf-8'
203
+ )
160
204
 
161
- const lines = rcFileContent.split('\n');
162
- const composerAuthInRcFile = lines.some((line) => line.startsWith('export COMPOSER_AUTH='));
205
+ const lines = rcFileContent.split('\n')
206
+ const composerAuthInRcFile = lines.some((line) =>
207
+ line.startsWith('export COMPOSER_AUTH=')
208
+ )
163
209
 
164
210
  if (composerAuthInRcFile) {
165
- doConfigure = false;
211
+ doConfigure = false
166
212
  const loadCredentialsFrom = await task.prompt({
167
213
  type: 'Confirm',
168
- message: `We detected that you have ${ logger.style.misc('COMPOSER_AUTH') } environment variable set in ${ logger.style.file(shellConfigFilePath) } file,
169
- but we do not see this variable inside ${ logger.style.code('magento-scripts') } process.
170
-
171
- ${ logger.style.misc('! Don\'t forget to reload your shell after process is finished !') }
214
+ message: `We detected that you have ${logger.style.misc(
215
+ 'COMPOSER_AUTH'
216
+ )} environment variable set in ${logger.style.file(
217
+ shellConfigFilePath
218
+ )} file,
219
+ but we do not see this variable inside ${logger.style.code(
220
+ 'magento-scripts'
221
+ )} process.
222
+
223
+ ${logger.style.misc(
224
+ "! Don't forget to reload your shell after process is finished !"
225
+ )}
172
226
 
173
227
  Would you like to load them now?`
174
- });
228
+ })
175
229
 
176
230
  if (loadCredentialsFrom) {
177
- const credentialsLine = lines.find((line) => line.startsWith('export COMPOSER_AUTH='));
231
+ const credentialsLine = lines.find((line) =>
232
+ line.startsWith('export COMPOSER_AUTH=')
233
+ )
178
234
  process.env.COMPOSER_AUTH = JSON.stringify(
179
- JSON.parse(credentialsLine.replace('export COMPOSER_AUTH=', '').replace(/'/ig, '').trim()),
235
+ JSON.parse(
236
+ // credentialsLine does exists, we know it from check above
237
+ // @ts-ignore
238
+ credentialsLine
239
+ .replace('export COMPOSER_AUTH=', '')
240
+ .replace(/'/gi, '')
241
+ .trim()
242
+ ),
180
243
  null,
181
244
  0
182
- );
183
- problems.delete(MISSING_COMPOSER_AUTH_ENV);
245
+ )
246
+ problems.delete(MISSING_COMPOSER_AUTH_ENV)
184
247
  }
185
248
  }
186
249
  }
187
250
 
188
251
  if (doConfigure) {
189
- return task.newListr(
190
- configureComposerCredentials()
191
- );
252
+ return task.newListr(configureComposerCredentials())
192
253
  }
193
254
  }
194
255
 
195
- let composerAuthContent;
256
+ let composerAuthContent
196
257
 
197
258
  if (!problems.has(MISSING_AUTH_JSON)) {
198
259
  try {
199
- const composerAuthFileContent = await fs.promises.readFile(authJsonPath, 'utf-8');
260
+ const composerAuthFileContent = await fs.promises.readFile(
261
+ authJsonPath,
262
+ 'utf-8'
263
+ )
200
264
 
201
- composerAuthContent = JSON.parse(composerAuthFileContent);
265
+ composerAuthContent = JSON.parse(composerAuthFileContent)
202
266
 
203
- // eslint-disable-next-line max-len
204
- const repoMagentoCredentials = composerAuthContent && composerAuthContent['http-basic'] && composerAuthContent['http-basic']['repo.magento.com'];
267
+ const repoMagentoCredentials =
268
+ composerAuthContent &&
269
+ composerAuthContent['http-basic'] &&
270
+ composerAuthContent['http-basic']['repo.magento.com']
205
271
 
206
- const hasEmptyCharacterInUsername = repoMagentoCredentials && /\s/i.test(repoMagentoCredentials.username);
207
- const hasEmptyCharacterInPassword = repoMagentoCredentials && /\s/i.test(repoMagentoCredentials.password);
272
+ const hasEmptyCharacterInUsername =
273
+ repoMagentoCredentials &&
274
+ /\s/i.test(repoMagentoCredentials.username)
275
+ const hasEmptyCharacterInPassword =
276
+ repoMagentoCredentials &&
277
+ /\s/i.test(repoMagentoCredentials.password)
208
278
 
209
279
  // TODO refactor to check all fields, not only for magento
210
- const message = (hasEmptyCharacterInUsername && hasEmptyCharacterInPassword)
211
- ? `Both ${logger.style.misc('username')} and ${logger.style.misc('password')} fields in ${logger.style.misc('http-basic -> repo.magento.com')} in ${logger.style.file('./auth.json')} contains empty characters (spaces).
280
+ const message =
281
+ hasEmptyCharacterInUsername && hasEmptyCharacterInPassword
282
+ ? `Both ${logger.style.misc(
283
+ 'username'
284
+ )} and ${logger.style.misc(
285
+ 'password'
286
+ )} fields in ${logger.style.misc(
287
+ 'http-basic -> repo.magento.com'
288
+ )} in ${logger.style.file(
289
+ './auth.json'
290
+ )} contains empty characters (spaces).
212
291
  Do you want to remove them now? File will be overwritten.`
213
- : hasEmptyCharacterInUsername
214
- ? `Your ${logger.style.misc('http-basic -> repo.magento.com -> username')} field in ${logger.style.file('./auth.json')} contains empty characters (spaces).
292
+ : hasEmptyCharacterInUsername
293
+ ? `Your ${logger.style.misc(
294
+ 'http-basic -> repo.magento.com -> username'
295
+ )} field in ${logger.style.file(
296
+ './auth.json'
297
+ )} contains empty characters (spaces).
215
298
  Do you want to remove them now? File will be overwritten.`
216
299
  : hasEmptyCharacterInPassword
217
- ? `Your ${logger.style.misc('http-basic -> repo.magento.com -> password')} field in ${logger.style.file('./auth.json')} contains empty characters (spaces).
300
+ ? `Your ${logger.style.misc(
301
+ 'http-basic -> repo.magento.com -> password'
302
+ )} field in ${logger.style.file(
303
+ './auth.json'
304
+ )} contains empty characters (spaces).
218
305
  Do you want to remove them now? File will be overwritten.`
219
- : null;
306
+ : null
220
307
 
221
308
  if (message) {
222
309
  const response = await task.prompt({
@@ -229,60 +316,76 @@ Do you want to remove them now? File will be overwritten.`
229
316
  },
230
317
  {
231
318
  name: 'skip',
232
- message: 'No, I know what I\'m doing'
319
+ message: "No, I know what I'm doing"
233
320
  }
234
321
  ]
235
- });
322
+ })
236
323
 
237
324
  if (response === 'overwrite') {
238
325
  if (repoMagentoCredentials.username) {
239
- repoMagentoCredentials.username = repoMagentoCredentials.username.replace(/\s/i, '');
326
+ repoMagentoCredentials.username =
327
+ repoMagentoCredentials.username.replace(
328
+ /\s/i,
329
+ ''
330
+ )
240
331
  }
241
332
 
242
333
  if (repoMagentoCredentials.password) {
243
- repoMagentoCredentials.password = repoMagentoCredentials.password.replace(/\s/i, '');
334
+ repoMagentoCredentials.password =
335
+ repoMagentoCredentials.password.replace(
336
+ /\s/i,
337
+ ''
338
+ )
244
339
  }
245
340
 
246
341
  await fs.promises.writeFile(
247
342
  authJsonPath,
248
343
  JSON.stringify(composerAuthContent, null, 4),
249
344
  'utf-8'
250
- );
345
+ )
251
346
  }
252
347
  }
253
348
 
254
- process.env.COMPOSER_AUTH = composerAuthFileContent;
349
+ process.env.COMPOSER_AUTH = composerAuthFileContent
255
350
  } catch (e) {
256
351
  throw new UnknownError(
257
- `We found an error in your ${ logger.style.file('./auth.json') } file.
352
+ `We found an error in your ${logger.style.file(
353
+ './auth.json'
354
+ )} file.
258
355
 
259
356
  Make sure that this file contains a valid JSON!
260
357
 
261
- You can try linting your file here: ${ logger.style.link('https://jsonformatter.curiousconcept.com/') }
358
+ You can try linting your file here: ${logger.style.link(
359
+ 'https://jsonformatter.curiousconcept.com/'
360
+ )}
262
361
 
263
362
  Error message that we got: ${e}`
264
- );
363
+ )
265
364
  }
266
365
  }
267
366
 
268
367
  if (!problems.has(MISSING_COMPOSER_AUTH_ENV) && !composerAuthContent) {
269
368
  try {
270
- composerAuthContent = JSON.parse(process.env.COMPOSER_AUTH);
369
+ composerAuthContent = JSON.parse(process.env.COMPOSER_AUTH)
271
370
  } catch (e) {
272
371
  throw new UnknownError(
273
- `We found an error in your ${ logger.style.misc('$COMPOSER_AUTH') } environment variable.
372
+ `We found an error in your ${logger.style.misc(
373
+ '$COMPOSER_AUTH'
374
+ )} environment variable.
274
375
 
275
376
  Make sure that this variable contains a valid JSON!
276
377
 
277
- You can try linting your variable here: ${ logger.style.link('https://jsonformatter.curiousconcept.com/') }
378
+ You can try linting your variable here: ${logger.style.link(
379
+ 'https://jsonformatter.curiousconcept.com/'
380
+ )}
278
381
 
279
382
  Error message that we got: ${e}`
280
- );
383
+ )
281
384
  }
282
385
  }
283
386
  }
284
- });
387
+ })
285
388
 
286
389
  module.exports = {
287
390
  checkComposerCredentials
288
- };
391
+ }