@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,29 +1,47 @@
1
- const path = require('path');
2
- const UnknownError = require('../errors/unknown-error');
3
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
4
- const pathExists = require('./path-exists');
1
+ const path = require('path')
2
+ const UnknownError = require('../errors/unknown-error')
3
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
4
+ const pathExists = require('./path-exists')
5
5
 
6
6
  /**
7
7
  * @param {import('../../typings/context').ListrContext} ctx
8
8
  */
9
9
  const configPhpToJson = async (ctx) => {
10
- const configPhpOnSystemPath = path.join(ctx.config.baseConfig.magentoDir, 'app', 'etc', 'config.php');
11
- const configPhpInContainerPath = path.join(ctx.config.baseConfig.containerMagentoDir, 'app', 'etc', 'config.php');
12
- if (!await pathExists(configPhpOnSystemPath)) {
13
- return null;
10
+ const configPhpOnSystemPath = path.join(
11
+ ctx.config.baseConfig.magentoDir,
12
+ 'app',
13
+ 'etc',
14
+ 'config.php'
15
+ )
16
+ const configPhpInContainerPath = path.join(
17
+ ctx.config.baseConfig.containerMagentoDir,
18
+ 'app',
19
+ 'etc',
20
+ 'config.php'
21
+ )
22
+ if (!(await pathExists(configPhpOnSystemPath))) {
23
+ return null
14
24
  }
15
- const { code, result } = await runPHPContainerCommand(ctx, `php -r "echo json_encode(require '${configPhpInContainerPath}');"`, {
16
- withCode: true
17
- });
25
+ const { code, result } = await runPHPContainerCommand(
26
+ ctx,
27
+ `php -r "echo json_encode(require '${configPhpInContainerPath}');"`,
28
+ {
29
+ withCode: true
30
+ }
31
+ )
18
32
 
19
33
  if (code !== 0) {
20
- throw new UnknownError(`Received non-zero code during converting app/etc/config.php to json:\n\n${result}`);
34
+ throw new UnknownError(
35
+ `Received non-zero code during converting app/etc/config.php to json:\n\n${result}`
36
+ )
21
37
  }
22
38
  try {
23
- return JSON.parse(result);
39
+ return JSON.parse(result)
24
40
  } catch (e) {
25
- throw new UnknownError(`Ooops! Something went wrong when trying to parse app/etc/config.php file!\n\n${e}\n\nFile result: ${result}`);
41
+ throw new UnknownError(
42
+ `Ooops! Something went wrong when trying to parse app/etc/config.php file!\n\n${e}\n\nFile result: ${result}`
43
+ )
26
44
  }
27
- };
45
+ }
28
46
 
29
- module.exports = configPhpToJson;
47
+ module.exports = configPhpToJson
@@ -2,11 +2,12 @@
2
2
  * @typedef ParsedConnection
3
3
  * @prop {String} protocol
4
4
  * @prop {String} [user]
5
+ * @prop {String} [password]
5
6
  * @prop {String} [port]
6
7
  * @prop {String} host
7
8
  * @prop {String} [hostname]
8
9
  * @prop {String[]} [segments]
9
- * @prop {Record<string, string} params
10
+ * @prop {Record<string, string>} params
10
11
  */
11
12
 
12
13
  /**
@@ -14,49 +15,62 @@
14
15
  * @returns {ParsedConnection}
15
16
  */
16
17
  const connectionStringParser = (url) => {
17
- // eslint-disable-next-line no-useless-escape
18
- const pattern = /^(?:([^:\/?#\s]+):\/{2})?(?:([^@\/?#\s]+)@)?([^\/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$/;
19
- const matches = url.match(pattern);
20
- const params = {};
21
- if (matches[5] !== undefined) {
18
+ const pattern =
19
+ /^(?:([^:/?#\s]+):\/{2})?(?:([^@/?#\s]+)@)?([^/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$/
20
+ const matches = url.match(pattern)
21
+
22
+ if (!matches) {
23
+ return {
24
+ host: '',
25
+ params: {},
26
+ protocol: ''
27
+ }
28
+ }
29
+ /**
30
+ * @type {Record<string, string>}
31
+ */
32
+ const params = {}
33
+ if (matches && matches[5] !== undefined) {
22
34
  matches[5].split('&').forEach((x) => {
23
- const a = x.split('=');
24
- params[a[0]] = a[1];
25
- });
35
+ const a = x.split('=')
36
+ params[a[0]] = a[1]
37
+ })
26
38
  }
27
39
 
28
40
  return {
29
41
  protocol: matches[1],
30
42
  user: matches[2] !== undefined ? matches[2].split(':')[0] : undefined,
31
- password: matches[2] !== undefined ? matches[2].split(':')[1] : undefined,
43
+ password:
44
+ matches[2] !== undefined ? matches[2].split(':')[1] : undefined,
32
45
  host: matches[3],
33
- hostname: matches[3] !== undefined ? matches[3].split(/:(?=\d+$)/)[0] : undefined,
34
- port: matches[3] !== undefined ? matches[3].split(/:(?=\d+$)/)[1] : undefined,
46
+ hostname:
47
+ matches[3] !== undefined
48
+ ? matches[3].split(/:(?=\d+$)/)[0]
49
+ : undefined,
50
+ port:
51
+ matches[3] !== undefined
52
+ ? matches[3].split(/:(?=\d+$)/)[1]
53
+ : undefined,
35
54
  segments: matches[4] !== undefined ? matches[4].split('/') : undefined,
36
55
  params
37
- };
38
- };
56
+ }
57
+ }
39
58
 
40
59
  /**
41
60
  * @param {ParsedConnection} options
42
61
  * @returns {String}
43
62
  */
44
63
  const connectionStringBuilder = (options) => {
45
- const {
46
- protocol,
47
- user,
48
- password,
49
- host,
50
- port,
51
- segments,
52
- params
53
- } = options;
64
+ const { protocol, user, password, host, port, segments, params } = options
54
65
 
55
- // eslint-disable-next-line max-len
56
- return `${protocol}://${(user && password) ? `${user}:${password}@` : ''}${host}${port ? `:${port}` : ''}/${(segments && segments.length > 0) ? segments.join('/') : ''}${new URLSearchParams(params).toString()}`;
57
- };
66
+ return `${protocol}://${
67
+ user && password ? `${user}:${password}@` : ''
68
+ }${host}${port ? `:${port}` : ''}/${
69
+ segments && segments.length > 0 ? segments.join('/') : ''
70
+ }${new URLSearchParams(params).toString()}`
71
+ }
58
72
 
59
73
  module.exports = {
60
74
  connectionStringParser,
61
75
  connectionStringBuilder
62
- };
76
+ }
@@ -4,49 +4,48 @@
4
4
  * @typedef {{ type: BlockType, data: string }} Block
5
5
  */
6
6
 
7
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
8
-
9
- const HORIZONTAL_SEPARATOR = '-';
10
- const VERTICAL_SEPARATOR = '|';
11
- const EMPTY_CHAR = ' ';
12
- const TOP_LEFT_SEPARATOR = '┌';
13
- const TOP_RIGHT_SEPARATOR = '┐';
14
- const MIDDLE_LEFT_SEPARATOR = '├';
15
- const MIDDLE_RIGHT_SEPARATOR = '┤';
16
- const BOTTOM_LEFT_SEPARATOR = '└';
17
- const BOTTOM_RIGHT_SEPARATOR = '┘';
7
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
8
+
9
+ const HORIZONTAL_SEPARATOR = '-'
10
+ const VERTICAL_SEPARATOR = '|'
11
+ const EMPTY_CHAR = ' '
12
+ const TOP_LEFT_SEPARATOR = '┌'
13
+ const TOP_RIGHT_SEPARATOR = '┐'
14
+ const MIDDLE_LEFT_SEPARATOR = '├'
15
+ const MIDDLE_RIGHT_SEPARATOR = '┤'
16
+ const BOTTOM_LEFT_SEPARATOR = '└'
17
+ const BOTTOM_RIGHT_SEPARATOR = '┘'
18
18
 
19
19
  // eslint-disable-next-line no-control-regex
20
- const consoleStyleReplacer = /[\u001b]\[\S+?m/g;
20
+ const consoleStyleReplacer = /[\u001b]\[\S+?m/g
21
21
 
22
22
  class ConsoleBlock {
23
23
  constructor() {
24
24
  /**
25
25
  * @type {Block[]}
26
26
  */
27
- this.data = [];
27
+ this.data = []
28
28
  }
29
29
 
30
30
  /**
31
31
  * @param {string} header
32
32
  */
33
33
  addHeader(header) {
34
- this.data.unshift(
35
- {
36
- type: 'header',
37
- data: header
38
- }
39
- );
34
+ this.data.unshift({
35
+ type: 'header',
36
+ data: header
37
+ })
40
38
 
41
- return this;
39
+ return this
42
40
  }
43
41
 
44
42
  addEmptyLine() {
45
43
  this.data.push({
46
- type: 'empty-line'
47
- });
44
+ type: 'empty-line',
45
+ data: ''
46
+ })
48
47
 
49
- return this;
48
+ return this
50
49
  }
51
50
 
52
51
  /**
@@ -56,9 +55,9 @@ class ConsoleBlock {
56
55
  this.data.push({
57
56
  type: 'line',
58
57
  data: line
59
- });
58
+ })
60
59
 
61
- return this;
60
+ return this
62
61
  }
63
62
 
64
63
  /**
@@ -68,58 +67,106 @@ class ConsoleBlock {
68
67
  this.data.push({
69
68
  type: 'separator',
70
69
  data: separator
71
- });
70
+ })
72
71
 
73
- return this;
72
+ return this
74
73
  }
75
74
 
76
75
  log() {
77
76
  const longestLineRaw = this.data.reduce(
78
- (acc, { data = '' }) => (
79
- data.replace(consoleStyleReplacer, '').length > acc ? data.replace(consoleStyleReplacer, '').length : acc
80
- ),
77
+ (acc, { data = '' }) =>
78
+ data.replace(consoleStyleReplacer, '').length > acc
79
+ ? data.replace(consoleStyleReplacer, '').length
80
+ : acc,
81
81
  0
82
- );
83
- const longestLine = longestLineRaw % 2 === 0 ? longestLineRaw + 2 : longestLineRaw + 3;
82
+ )
83
+ const longestLine =
84
+ longestLineRaw % 2 === 0 ? longestLineRaw + 2 : longestLineRaw + 3
84
85
 
85
- logger.log('');
86
+ logger.log('')
86
87
 
87
88
  this.data.forEach(({ type, data }) => {
88
89
  switch (type) {
89
- case 'header': {
90
- const dataLength = data.replace(consoleStyleReplacer, '').length;
91
- const spacersLength = (longestLine - (dataLength % 2 === 0 ? dataLength : (dataLength + 1))) / 2;
92
-
93
- logger.log(`${TOP_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(spacersLength)}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(dataLength % 2 === 0 ? spacersLength : spacersLength + 1)}${TOP_RIGHT_SEPARATOR}`);
94
- break;
95
- }
96
-
97
- case 'line': {
98
- logger.log(`${VERTICAL_SEPARATOR}${EMPTY_CHAR}${data}${EMPTY_CHAR.repeat(longestLine - data.replace(consoleStyleReplacer, '').length || 1)}${EMPTY_CHAR}${VERTICAL_SEPARATOR}`);
99
- break;
100
- }
101
-
102
- case 'separator': {
103
- const dataLength = data.replace(consoleStyleReplacer, '').length;
104
- const spacersLength = (longestLine - (dataLength % 2 === 0 ? dataLength : (dataLength + 1))) / 2;
105
-
106
- logger.log(`${MIDDLE_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(spacersLength)}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(dataLength % 2 === 0 ? spacersLength : spacersLength + 1)}${MIDDLE_RIGHT_SEPARATOR}`);
107
- break;
108
- }
109
-
110
- case 'empty-line': {
111
- logger.log(`${VERTICAL_SEPARATOR}${EMPTY_CHAR.repeat(longestLine + 2)}${VERTICAL_SEPARATOR}`);
112
- break;
113
- }
114
-
115
- default: {
116
- //
117
- }
90
+ case 'header': {
91
+ const dataLength = data.replace(
92
+ consoleStyleReplacer,
93
+ ''
94
+ ).length
95
+ const spacersLength =
96
+ (longestLine -
97
+ (dataLength % 2 === 0
98
+ ? dataLength
99
+ : dataLength + 1)) /
100
+ 2
101
+
102
+ logger.log(
103
+ `${TOP_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
104
+ spacersLength
105
+ )}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(
106
+ dataLength % 2 === 0
107
+ ? spacersLength
108
+ : spacersLength + 1
109
+ )}${TOP_RIGHT_SEPARATOR}`
110
+ )
111
+ break
112
+ }
113
+
114
+ case 'line': {
115
+ logger.log(
116
+ `${VERTICAL_SEPARATOR}${EMPTY_CHAR}${data}${EMPTY_CHAR.repeat(
117
+ longestLine -
118
+ data.replace(consoleStyleReplacer, '').length ||
119
+ 1
120
+ )}${EMPTY_CHAR}${VERTICAL_SEPARATOR}`
121
+ )
122
+ break
123
+ }
124
+
125
+ case 'separator': {
126
+ const dataLength = data.replace(
127
+ consoleStyleReplacer,
128
+ ''
129
+ ).length
130
+ const spacersLength =
131
+ (longestLine -
132
+ (dataLength % 2 === 0
133
+ ? dataLength
134
+ : dataLength + 1)) /
135
+ 2
136
+
137
+ logger.log(
138
+ `${MIDDLE_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
139
+ spacersLength
140
+ )}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(
141
+ dataLength % 2 === 0
142
+ ? spacersLength
143
+ : spacersLength + 1
144
+ )}${MIDDLE_RIGHT_SEPARATOR}`
145
+ )
146
+ break
147
+ }
148
+
149
+ case 'empty-line': {
150
+ logger.log(
151
+ `${VERTICAL_SEPARATOR}${EMPTY_CHAR.repeat(
152
+ longestLine + 2
153
+ )}${VERTICAL_SEPARATOR}`
154
+ )
155
+ break
156
+ }
157
+
158
+ default: {
159
+ //
160
+ }
118
161
  }
119
- });
162
+ })
120
163
 
121
- logger.logN(`${BOTTOM_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(longestLine + 2)}${BOTTOM_RIGHT_SEPARATOR}`);
164
+ logger.logN(
165
+ `${BOTTOM_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
166
+ longestLine + 2
167
+ )}${BOTTOM_RIGHT_SEPARATOR}`
168
+ )
122
169
  }
123
170
  }
124
171
 
125
- module.exports = ConsoleBlock;
172
+ module.exports = ConsoleBlock
@@ -1,82 +1,105 @@
1
1
  /**
2
2
  * Update table in **magento** database
3
3
  * @param {String} table Table name
4
- * @param {{path: string, value: string}[]} values
5
- * @param {import('../../typings/context').ListrContext} param1
4
+ * @param {{ path: string, value: string | number | null }[]} values
5
+ * @param {{ databaseConnection: import('../../typings/context').ListrContext['databaseConnection'], task: import('listr2').ListrTaskWrapper<import('../../typings/context').ListrContext, any> }} param2
6
6
  */
7
- const updateTableValues = async (table, values, { databaseConnection, task }) => {
7
+ const updateTableValues = async (
8
+ table,
9
+ values,
10
+ { databaseConnection, task }
11
+ ) => {
8
12
  const [rows] = await databaseConnection.query(`
9
13
  SELECT * FROM ${table}
10
14
  WHERE ${values.map((p) => `path = '${p.path}'`).join(' OR ')};
11
- `);
15
+ `)
12
16
 
13
17
  if (rows.filter(Boolean).length !== values.length) {
14
- const lostConfigs = values.filter((p) => !rows.some((row) => row.path === p.path));
18
+ const lostConfigs = values.filter(
19
+ (p) => !rows.some((row) => row.path === p.path)
20
+ )
15
21
  for (const config of lostConfigs) {
16
- await databaseConnection.query(`
22
+ await databaseConnection.query(
23
+ `
17
24
  INSERT INTO ${table}
18
25
  (scope, path, value)
19
26
  VALUES ('default', ?, ?);
20
- `, [config.path, config.value]);
27
+ `,
28
+ [config.path, config.value]
29
+ )
21
30
  }
22
31
 
23
- const configsToUpdate = values.filter((p) => rows.some((row) => row.path === p.path));
32
+ const configsToUpdate = values.filter((p) =>
33
+ rows.some((row) => row.path === p.path)
34
+ )
24
35
  for (const config of configsToUpdate) {
25
- await databaseConnection.query(`
36
+ await databaseConnection.query(
37
+ `
26
38
  UPDATE ${table}
27
39
  SET value = ?
28
40
  WHERE path = ?;
29
- `, [config.value, config.path]);
41
+ `,
42
+ [config.value, config.path]
43
+ )
30
44
  }
31
45
 
32
- return;
46
+ return
33
47
  }
34
48
 
49
+ /**
50
+ * @param {{ path: string, value: unknown }} param0
51
+ */
35
52
  const checkIfValueIsCorrect = ({ path, value }) => {
36
- const val = values.find((p) => p.path === path);
53
+ const val = values.find((p) => p.path === path)
37
54
 
38
- return val && val.value === value;
39
- };
55
+ return val && val.value === value
56
+ }
40
57
 
41
58
  if (rows.every(checkIfValueIsCorrect)) {
42
- task.skip();
43
- return;
59
+ task.skip()
60
+ return
44
61
  }
45
62
 
46
63
  const configsToUpdate = values.filter(({ path, value }) => {
47
- const row = rows.find((row) => row.path === path);
64
+ const row = rows.find((row) => row.path === path)
48
65
 
49
- return row && row.value !== value;
50
- });
66
+ return row && row.value !== value
67
+ })
51
68
 
52
69
  for (const config of configsToUpdate) {
53
- await databaseConnection.query(`
70
+ await databaseConnection.query(
71
+ `
54
72
  UPDATE ${table}
55
73
  SET value = ?
56
74
  WHERE path = ?;
57
- `, [config.value, config.path]);
75
+ `,
76
+ [config.value, config.path]
77
+ )
58
78
  }
59
- };
79
+ }
60
80
 
61
81
  /**
62
- * @param {String} database
63
- * @param {String} tableName
64
- * @param {import('../../typings/context').ListrContext} param2
65
- */
82
+ * @param {String} database
83
+ * @param {String} tableName
84
+ * @param {import('../../typings/context').ListrContext} param2
85
+ */
66
86
  const isTableExists = async (database, tableName, { databaseConnection }) => {
67
87
  /**
68
- * @type {{ tableCount: number }[][]}
69
- */
70
- const [[{ tableCount }]] = await databaseConnection.query(`
88
+ * @type {{ tableCount: number }[][]}
89
+ */
90
+ const [[{ tableCount }]] = await databaseConnection.query(
91
+ `
71
92
  SELECT count(*) as tableCount
72
93
  FROM information_schema.TABLES
73
94
  WHERE (TABLE_SCHEMA = ?) AND (TABLE_NAME = ?);
74
- `, [database, tableName]);
95
+ `,
96
+ [database, tableName]
97
+ )
75
98
 
76
- return tableCount > 0;
77
- };
99
+ return tableCount > 0
100
+ }
78
101
 
79
102
  module.exports = {
80
103
  updateTableValues,
81
104
  isTableExists
82
- };
105
+ }
@@ -1 +1 @@
1
- export function deepmerge<T>(target: T, ...sources: T[]): T
1
+ export function deepmerge<T>(target: T, ...sources: Partial<T>[]): T
@@ -1,37 +1,28 @@
1
1
  /**
2
2
  * Merge object deeply
3
- * @param {object} target
4
- * @param {...object} sources
5
- * @returns {object}
3
+ * @type {<T>(target: T, ...sources: Partial<T>[]) => T}
6
4
  */
7
- function deepmerge(
8
- target,
9
- ...sources
10
- ) {
11
- const targetCopy = { ...target };
12
- const isObject = (obj) => obj && typeof obj === 'object';
13
- sources.forEach((source) => Object.keys(source).forEach((key) => {
14
- const targetValue = targetCopy[key];
15
- const sourceValue = source[key];
5
+ function deepmerge(target, ...sources) {
6
+ const targetCopy = { ...target }
7
+ const isObject = (obj) => obj && typeof obj === 'object'
8
+ sources.forEach((source) =>
9
+ Object.keys(source).forEach((key) => {
10
+ const targetValue = targetCopy[key]
11
+ const sourceValue = source[key]
16
12
 
17
- if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
18
- targetCopy[key] = targetValue.concat(sourceValue);
19
- } else if (
20
- isObject(targetValue)
21
- && isObject(sourceValue)
22
- ) {
23
- targetCopy[key] = deepmerge(
24
- { ...targetValue },
25
- sourceValue
26
- );
27
- } else {
28
- targetCopy[key] = sourceValue;
29
- }
30
- }));
13
+ if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
14
+ targetCopy[key] = targetValue.concat(sourceValue)
15
+ } else if (isObject(targetValue) && isObject(sourceValue)) {
16
+ targetCopy[key] = deepmerge({ ...targetValue }, sourceValue)
17
+ } else {
18
+ targetCopy[key] = sourceValue
19
+ }
20
+ })
21
+ )
31
22
 
32
- return targetCopy;
23
+ return targetCopy
33
24
  }
34
25
 
35
26
  module.exports = {
36
27
  deepmerge
37
- };
28
+ }