@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,119 +1,102 @@
1
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
1
+ const { execAsyncSpawn } = require('../../../util/exec-async-command')
2
2
 
3
3
  /**
4
4
  * @param {import('./volume-api').VolumeCreateOptions} options
5
5
  * @param {import('../../../util/exec-async-command').ExecAsyncSpawnOptions} execOptions
6
6
  */
7
7
  const create = async (options, execOptions = {}) => {
8
- const {
9
- driver,
10
- label,
11
- opt,
12
- name
13
- } = options;
14
-
15
- const driverArg = driver && `--driver=${driver}`;
16
- const labelArg = label && `--label=${label}`;
17
- const optArg = opt && Object.entries(opt).map(([name, value]) => `--opt ${name}="${value}"`).join(' ');
18
-
19
- const args = [
20
- driverArg,
21
- labelArg,
22
- optArg,
23
- name
24
- ].filter(Boolean).join(' ');
25
-
26
- return execAsyncSpawn(`docker volume create ${args}`, execOptions);
27
- };
8
+ const { driver, label, opt, name } = options
9
+
10
+ const driverArg = driver && `--driver=${driver}`
11
+ const labelArg = label && `--label=${label}`
12
+ const optArg =
13
+ opt &&
14
+ Object.entries(opt)
15
+ .map(([name, value]) => `--opt ${name}="${value}"`)
16
+ .join(' ')
17
+
18
+ const args = [driverArg, labelArg, optArg, name].filter(Boolean).join(' ')
19
+
20
+ return execAsyncSpawn(`docker volume create ${args}`, execOptions)
21
+ }
28
22
 
29
23
  /**
30
24
  * @param {import('./volume-api').VolumeLsOptions} options
31
25
  * @param {import('../../../util/exec-async-command').ExecAsyncSpawnOptions} execOptions
32
26
  */
33
27
  const ls = async (options, execOptions = {}) => {
34
- const {
35
- filter,
36
- format,
37
- formatToJSON = false,
38
- quiet
39
- } = options;
40
-
41
- const formatArg = !formatToJSON && format
42
- ? `--format=${format}`
43
- : formatToJSON && '--format=\'{{json .}}\'';
44
- const filterArg = filter && typeof filter === 'string'
45
- ? `--filter=${filter}`
46
- : filter && Array.isArray(filter) && filter.every((f) => typeof f === 'string') && filter.map((f) => `--filter=${f}`).join(' ');
47
- const quietArg = quiet && '--quiet';
48
-
49
- const args = [
50
- filterArg,
51
- formatArg,
52
- quietArg
53
- ].filter(Boolean).join(' ');
28
+ const { filter, format, formatToJSON = false, quiet } = options
29
+
30
+ const formatArg =
31
+ !formatToJSON && format
32
+ ? `--format=${format}`
33
+ : formatToJSON && "--format='{{json .}}'"
34
+ const filterArg =
35
+ filter && typeof filter === 'string'
36
+ ? `--filter=${filter}`
37
+ : filter &&
38
+ Array.isArray(filter) &&
39
+ filter.every((f) => typeof f === 'string') &&
40
+ filter.map((f) => `--filter=${f}`).join(' ')
41
+ const quietArg = quiet && '--quiet'
42
+
43
+ const args = [filterArg, formatArg, quietArg].filter(Boolean).join(' ')
54
44
 
55
45
  if (formatToJSON) {
56
- const result = await execAsyncSpawn(`docker volume ls ${args}`, execOptions);
57
- return JSON.parse(`[${result.split('\n').join(', ')}]`);
46
+ const result = await execAsyncSpawn(
47
+ `docker volume ls ${args}`,
48
+ execOptions
49
+ )
50
+ return JSON.parse(`[${result.split('\n').join(', ')}]`)
58
51
  }
59
52
 
60
- return execAsyncSpawn(`docker volume ls ${args}`, execOptions);
61
- };
53
+ return execAsyncSpawn(`docker volume ls ${args}`, execOptions)
54
+ }
62
55
 
63
56
  /**
64
57
  * @param {import('./volume-api').VolumeRmOptions} options
65
58
  * @param {import('../../../util/exec-async-command').ExecAsyncSpawnOptions} execOptions
66
59
  */
67
60
  const rm = async (options, execOptions = {}) => {
68
- const {
69
- force,
70
- volumes
71
- } = options;
61
+ const { force, volumes } = options
72
62
 
73
- const forceArg = force && '--force';
63
+ const forceArg = force && '--force'
74
64
 
75
- const command = [
76
- 'docker',
77
- 'volume',
78
- 'rm',
79
- forceArg,
80
- ...volumes
81
- ].filter(Boolean).join(' ');
65
+ const command = ['docker', 'volume', 'rm', forceArg, ...volumes]
66
+ .filter(Boolean)
67
+ .join(' ')
82
68
 
83
- return execAsyncSpawn(command, execOptions);
84
- };
69
+ return execAsyncSpawn(command, execOptions)
70
+ }
85
71
 
86
72
  /**
87
73
  * @param {import('./volume-api').VolumeInspectOptions} options
88
74
  * @param {import('../../../util/exec-async-command').ExecAsyncSpawnOptions} execOptions
89
75
  */
90
76
  const inspect = async (options, execOptions = {}) => {
91
- const {
92
- volume,
93
- format,
94
- formatToJSON = false
95
- } = options;
77
+ const { volume, format, formatToJSON = false } = options
96
78
 
97
- const formatArg = !formatToJSON && format
98
- ? `--format=${format}`
99
- : formatToJSON && '--format=\'{{json .}}\'';
79
+ const formatArg =
80
+ !formatToJSON && format
81
+ ? `--format=${format}`
82
+ : formatToJSON && "--format='{{json .}}'"
100
83
 
101
- const args = [
102
- formatArg,
103
- volume
104
- ].filter(Boolean).join(' ');
84
+ const args = [formatArg, volume].filter(Boolean).join(' ')
105
85
 
106
86
  if (formatToJSON) {
107
- const result = await execAsyncSpawn(`docker volume inspect ${args}`, execOptions);
108
- return JSON.parse(result);
87
+ const result = await execAsyncSpawn(
88
+ `docker volume inspect ${args}`,
89
+ execOptions
90
+ )
91
+ return JSON.parse(result)
109
92
  }
110
93
 
111
- return execAsyncSpawn(`docker volume inspect ${args}`, execOptions);
112
- };
94
+ return execAsyncSpawn(`docker volume inspect ${args}`, execOptions)
95
+ }
113
96
 
114
97
  module.exports = {
115
98
  create,
116
99
  ls,
117
100
  rm,
118
101
  inspect
119
- };
102
+ }
@@ -1,61 +1,78 @@
1
- const { Listr } = require('listr2');
2
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
3
- const { checkRequirements } = require('./requirements');
4
- const getMagentoVersionConfig = require('../config/get-magento-version-config');
5
- const checkConfigurationFile = require('../config/check-configuration-file');
6
- const getProjectConfiguration = require('../config/get-project-configuration');
7
- const { getCachedPorts } = require('../config/get-port-config');
8
- const { executeInContainer, runInContainer } = require('../util/execute-in-container');
9
- const { containerApi } = require('./docker/containers');
10
- const dockerNetwork = require('./docker/network');
11
- const KnownError = require('../errors/known-error');
1
+ const { Listr } = require('listr2')
2
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
3
+ const { checkRequirements } = require('./requirements')
4
+ const getMagentoVersionConfig = require('../config/get-magento-version-config')
5
+ const checkConfigurationFile = require('../config/check-configuration-file')
6
+ const getProjectConfiguration = require('../config/get-project-configuration')
7
+ const { getCachedPorts } = require('../config/get-port-config')
8
+ const {
9
+ executeInContainer,
10
+ runInContainer
11
+ } = require('../util/execute-in-container')
12
+ const { containerApi } = require('./docker/containers')
13
+ const dockerNetwork = require('./docker/network')
14
+ const KnownError = require('../errors/known-error')
12
15
 
13
16
  /**
14
17
  *
15
- * @param {{ containername: string, commands?: string[] }} argv
18
+ * @param {{ containername: string, commands: string[] }} argv
16
19
  * @returns
17
20
  */
18
21
  const executeTask = async (argv) => {
19
- const tasks = new Listr([
20
- checkRequirements(),
21
- getMagentoVersionConfig(),
22
- checkConfigurationFile(),
23
- getProjectConfiguration(),
24
- getCachedPorts(),
25
- dockerNetwork.tasks.createNetwork()
26
- ], {
27
- concurrent: false,
28
- exitOnError: true,
29
- ctx: { throwMagentoVersionMissing: true },
30
- rendererOptions: { collapse: false, clearOutput: true }
31
- });
32
-
33
- let ctx;
22
+ const tasks = new Listr(
23
+ [
24
+ checkRequirements(),
25
+ getMagentoVersionConfig(),
26
+ checkConfigurationFile(),
27
+ getProjectConfiguration(),
28
+ getCachedPorts(),
29
+ dockerNetwork.tasks.createNetwork()
30
+ ],
31
+ {
32
+ concurrent: false,
33
+ exitOnError: true,
34
+ ctx: { throwMagentoVersionMissing: true },
35
+ rendererOptions: { collapse: false, clearOutput: true }
36
+ }
37
+ )
38
+
39
+ let ctx
34
40
  try {
35
- ctx = await tasks.run();
41
+ ctx = await tasks.run()
36
42
  } catch (e) {
37
- logger.error(e.message || e);
38
- process.exit(1);
43
+ logger.error(e.message || e)
44
+ process.exit(1)
39
45
  }
40
- const containers = ctx.config.docker.getContainers(ctx.ports);
41
- const services = Object.keys(containers);
42
-
43
- if (services.includes(argv.containername) || services.some((service) => service.includes(argv.containername))) {
44
- /**
45
- * @type {import('./docker/containers/container-api').ContainerRunOptions}
46
- */
47
- const container = containers[argv.containername]
46
+ const containers = ctx.config.docker.getContainers(ctx.ports)
47
+ const services = Object.keys(containers)
48
+
49
+ if (
50
+ services.includes(argv.containername) ||
51
+ services.some((service) => service.includes(argv.containername))
52
+ ) {
53
+ const containerResult = containers[argv.containername]
48
54
  ? containers[argv.containername]
49
- : Object.entries(containers).find(([key]) => key.includes(argv.containername))[1];
55
+ : Object.entries(containers).find(([key]) =>
56
+ key.includes(argv.containername)
57
+ )
58
+
59
+ if (!containerResult) {
60
+ logger.error(`No container found "${argv.containername}"`)
61
+ process.exit(1)
62
+ }
63
+
64
+ const container =
65
+ containerResult && Array.isArray(containerResult)
66
+ ? containerResult[1]
67
+ : containerResult
50
68
 
51
69
  if (argv.commands.length === 0) {
52
- // if we have default connect command then use it
70
+ // if we have default connect command then use it
53
71
  if (container.connectCommand) {
54
- // eslint-disable-next-line no-param-reassign
55
- argv.commands = container.connectCommand;
72
+ argv.commands = container.connectCommand
56
73
  } else {
57
- // otherwise fall back to bash (if it exists inside container)
58
- argv.commands.push('bash');
74
+ // otherwise fall back to bash (if it exists inside container)
75
+ argv.commands.push('bash')
59
76
  }
60
77
  }
61
78
 
@@ -63,38 +80,57 @@ const executeTask = async (argv) => {
63
80
  formatToJSON: true,
64
81
  all: true,
65
82
  filter: `name=${container.name}`
66
- });
83
+ })
67
84
 
68
85
  if (containerList.length > 0) {
69
- logger.logN(`Executing container ${logger.style.misc(container._)} (command: ${logger.style.command(argv.commands.join(' '))})`);
86
+ if (process.stdout.isTTY) {
87
+ logger.logN(
88
+ `Executing container ${logger.style.misc(
89
+ container._
90
+ )} (command: ${logger.style.command(
91
+ argv.commands.join(' ')
92
+ )})`
93
+ )
94
+ }
95
+
70
96
  const result = await executeInContainer({
71
97
  containerName: container.name,
72
98
  commands: argv.commands,
73
99
  user: container.user
74
- });
100
+ })
75
101
 
76
- return result;
102
+ return result
77
103
  }
78
104
 
79
105
  if (container.name.endsWith('php')) {
80
- logger.logN(`Starting container ${logger.style.misc(container._)} with command: ${logger.style.command(argv.commands.join(' '))}`);
106
+ if (process.stdout.isTTY) {
107
+ logger.logN(
108
+ `Starting container ${logger.style.misc(
109
+ container._
110
+ )} with command: ${logger.style.command(
111
+ argv.commands.join(' ')
112
+ )}`
113
+ )
114
+ }
115
+
81
116
  const result = await runInContainer(
82
117
  {
83
118
  ...container,
84
119
  name: `${container.name}_exec-${Date.now()}`
85
120
  },
86
121
  argv.commands
87
- );
122
+ )
88
123
 
89
- return result;
124
+ return result
90
125
  }
91
126
 
92
- throw new KnownError(`Container ${container.name} is not running!`);
127
+ throw new KnownError(`Container ${container.name} is not running!`)
93
128
  }
94
129
 
95
- logger.error(`No container found "${argv.containername}"`);
96
- };
130
+ logger.error(`No container found "${argv.containername}"`)
131
+ process.exit(1)
132
+ }
97
133
 
98
134
  module.exports = {
99
135
  executeTask
100
- };
136
+ }
@@ -1,23 +1,38 @@
1
- const path = require('path');
2
- const UnknownError = require('../../errors/unknown-error');
3
- const setConfigFile = require('../../util/set-config');
1
+ const path = require('path')
2
+ const UnknownError = require('../../errors/unknown-error')
3
+ const setConfigFile = require('../../util/set-config')
4
4
 
5
5
  /**
6
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
6
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
7
7
  */
8
8
  const createMariaDBConfig = () => ({
9
9
  title: 'Setting MariaDB config',
10
10
  task: async (ctx) => {
11
11
  try {
12
12
  await setConfigFile({
13
- configPathname: path.join(ctx.config.baseConfig.cacheDir, 'mariadb.cnf'),
14
- template: path.join(ctx.config.baseConfig.templateDir, 'mariadb.template.cnf'),
15
- overwrite: true
16
- });
13
+ configPathname: path.join(
14
+ ctx.config.baseConfig.cacheDir,
15
+ 'mariadb.cnf'
16
+ ),
17
+ template: path.join(
18
+ ctx.config.baseConfig.templateDir,
19
+ 'mariadb.template.cnf'
20
+ ),
21
+ overwrite: true,
22
+ templateArgs: {
23
+ config: {
24
+ useOptimizerSwitch:
25
+ ctx.config.overridenConfiguration.configuration
26
+ .mariadb.useOptimizerSwitch
27
+ }
28
+ }
29
+ })
17
30
  } catch (e) {
18
- throw new UnknownError(`Unexpected error accrued during php-fpm config creation\n\n${e}`);
31
+ throw new UnknownError(
32
+ `Unexpected error accrued during php-fpm config creation\n\n${e}`
33
+ )
19
34
  }
20
35
  }
21
- });
36
+ })
22
37
 
23
- module.exports = createMariaDBConfig;
38
+ module.exports = createMariaDBConfig
@@ -1,30 +1,27 @@
1
- const path = require('path');
2
- const setConfigFile = require('../../util/set-config');
3
- const UnknownError = require('../../errors/unknown-error');
1
+ const path = require('path')
2
+ const setConfigFile = require('../../util/set-config')
3
+ const UnknownError = require('../../errors/unknown-error')
4
4
 
5
5
  /**
6
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
6
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
7
7
  */
8
8
  const createNginxConfig = () => ({
9
9
  title: 'Setting nginx config',
10
10
  task: async (ctx) => {
11
11
  const {
12
12
  ports,
13
- config: {
14
- overridenConfiguration,
15
- baseConfig
16
- },
13
+ config: { overridenConfiguration, baseConfig },
17
14
  isDockerDesktop
18
- } = ctx;
15
+ } = ctx
19
16
 
20
17
  const {
21
- configuration: {
22
- nginx
23
- }
24
- } = overridenConfiguration;
18
+ configuration: { nginx }
19
+ } = overridenConfiguration
25
20
 
26
- const hostMachine = !isDockerDesktop ? '127.0.0.1' : 'host.docker.internal';
27
- const hostPort = !isDockerDesktop ? ports.app : 80;
21
+ const hostMachine = !isDockerDesktop
22
+ ? '127.0.0.1'
23
+ : 'host.docker.internal'
24
+ const hostPort = !isDockerDesktop ? ports.app : 80
28
25
 
29
26
  try {
30
27
  await setConfigFile({
@@ -43,11 +40,13 @@ const createNginxConfig = () => ({
43
40
  hostPort,
44
41
  config: overridenConfiguration
45
42
  }
46
- });
43
+ })
47
44
  } catch (e) {
48
- throw new UnknownError(`Unexpected error accrued during nginx config creation\n\n${e}`);
45
+ throw new UnknownError(
46
+ `Unexpected error accrued during nginx config creation\n\n${e}`
47
+ )
49
48
  }
50
49
  }
51
- });
50
+ })
52
51
 
53
- module.exports = createNginxConfig;
52
+ module.exports = createNginxConfig
@@ -1,24 +1,28 @@
1
- const UnknownError = require('../../errors/unknown-error');
2
- const setConfigFile = require('../../util/set-config');
1
+ const UnknownError = require('../../errors/unknown-error')
2
+ const setConfigFile = require('../../util/set-config')
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 createPhpConfig = () => ({
8
8
  title: 'Setting PHP config',
9
9
  task: async (ctx) => {
10
- const { config: { php } } = ctx;
10
+ const {
11
+ config: { php }
12
+ } = ctx
11
13
 
12
14
  try {
13
15
  await setConfigFile({
14
16
  configPathname: php.iniPath,
15
17
  template: php.iniTemplatePath,
16
18
  overwrite: true
17
- });
19
+ })
18
20
  } catch (e) {
19
- throw new UnknownError(`Unexpected error accrued during php.ini config creation\n\n${e}`);
21
+ throw new UnknownError(
22
+ `Unexpected error accrued during php.ini config creation\n\n${e}`
23
+ )
20
24
  }
21
25
  }
22
- });
26
+ })
23
27
 
24
- module.exports = createPhpConfig;
28
+ module.exports = createPhpConfig
@@ -1,28 +1,31 @@
1
- const semver = require('semver');
2
- const UnknownError = require('../../errors/unknown-error');
3
- const setConfigFile = require('../../util/set-config');
4
- const { getEnabledExtensionsFromImage } = require('../docker/project-image-builder');
1
+ const semver = require('semver')
2
+ const UnknownError = require('../../errors/unknown-error')
3
+ const setConfigFile = require('../../util/set-config')
4
+ const {
5
+ getEnabledExtensionsFromImage
6
+ } = require('../docker/project-image-builder')
5
7
 
6
8
  /**
7
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
9
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
8
10
  */
9
11
  const createPhpDebugConfig = () => ({
10
12
  title: 'Setting PHP XDebug config',
11
13
  skip: (ctx) => !ctx.debug,
12
14
  task: async (ctx) => {
13
15
  const {
14
- config: {
15
- php,
16
- baseConfig
17
- },
16
+ config: { php, baseConfig },
18
17
  debug,
19
18
  isDockerDesktop
20
- } = ctx;
21
- const containers = ctx.config.docker.getContainers(ctx.ports);
22
- const phpExtensions = await getEnabledExtensionsFromImage(containers.php.debugImage);
23
- const isXDebug2 = semver.satisfies(phpExtensions.xdebug, '2');
19
+ } = ctx
20
+ const containers = ctx.config.docker.getContainers(ctx.ports)
21
+ const phpExtensions = await getEnabledExtensionsFromImage(
22
+ containers.php.debugImage
23
+ )
24
+ const isXDebug2 = semver.satisfies(phpExtensions.xdebug, '2')
24
25
 
25
- const hostMachine = !isDockerDesktop ? '127.0.0.1' : 'host.docker.internal';
26
+ const hostMachine = !isDockerDesktop
27
+ ? '127.0.0.1'
28
+ : 'host.docker.internal'
26
29
 
27
30
  try {
28
31
  await setConfigFile({
@@ -35,11 +38,13 @@ const createPhpDebugConfig = () => ({
35
38
  isXDebug2,
36
39
  hostMachine
37
40
  }
38
- });
41
+ })
39
42
  } catch (e) {
40
- throw new UnknownError(`Unexpected error accrued during xdebug.ini config creation\n\n${e}`);
43
+ throw new UnknownError(
44
+ `Unexpected error accrued during xdebug.ini config creation\n\n${e}`
45
+ )
41
46
  }
42
47
  }
43
- });
48
+ })
44
49
 
45
- module.exports = createPhpDebugConfig;
50
+ module.exports = createPhpDebugConfig
@@ -1,14 +1,17 @@
1
- const UnknownError = require('../../errors/unknown-error');
2
- const setConfigFile = require('../../util/set-config');
1
+ const UnknownError = require('../../errors/unknown-error')
2
+ const setConfigFile = require('../../util/set-config')
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 createPhpFpmConfig = () => ({
8
8
  title: 'Setting php-fpm config',
9
9
  task: async (ctx) => {
10
- const { config: { php }, isDockerDesktop } = ctx;
11
- const port = !isDockerDesktop ? ctx.ports.fpm : 9000;
10
+ const {
11
+ config: { php },
12
+ isDockerDesktop
13
+ } = ctx
14
+ const port = !isDockerDesktop ? ctx.ports.fpm : 9000
12
15
 
13
16
  try {
14
17
  await setConfigFile({
@@ -18,11 +21,13 @@ const createPhpFpmConfig = () => ({
18
21
  templateArgs: {
19
22
  port
20
23
  }
21
- });
24
+ })
22
25
  } catch (e) {
23
- throw new UnknownError(`Unexpected error accrued during php-fpm config creation\n\n${e}`);
26
+ throw new UnknownError(
27
+ `Unexpected error accrued during php-fpm config creation\n\n${e}`
28
+ )
24
29
  }
25
30
  }
26
- });
31
+ })
27
32
 
28
- module.exports = createPhpFpmConfig;
33
+ module.exports = createPhpFpmConfig