@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,33 @@
1
- const https = require('https');
2
- const http = require('http');
3
- const fs = require('fs');
1
+ const https = require('https')
2
+ const http = require('http')
3
+ const fs = require('fs')
4
4
 
5
- const downloadFile = (url, { destination } = {}) => new Promise((resolve, reject) => {
6
- const client = url.startsWith('https') ? https : http;
5
+ /**
6
+ * @param {string} url
7
+ * @param {Object} param1
8
+ * @param {string} param1.destination
9
+ * @returns {Promise<void>}
10
+ */
11
+ const downloadFile = (url, { destination }) =>
12
+ new Promise((resolve, reject) => {
13
+ const client = url.startsWith('https') ? https : http
7
14
 
8
- const writeStream = fs.createWriteStream(destination, { encoding: 'utf-8' });
15
+ const writeStream = fs.createWriteStream(destination, {
16
+ encoding: 'utf-8'
17
+ })
9
18
 
10
- const onError = (err) => {
11
- reject(err);
12
- };
13
- const req = client.get(url, (res) => {
14
- res.pipe(writeStream);
15
- });
19
+ /**
20
+ * @param {Error} err
21
+ */
22
+ const onError = (err) => {
23
+ reject(err)
24
+ }
25
+ const req = client.get(url, (res) => {
26
+ res.pipe(writeStream)
27
+ })
16
28
 
17
- req.on('error', onError);
18
- req.once('close', resolve);
19
- });
29
+ req.on('error', onError)
30
+ req.once('close', resolve)
31
+ })
20
32
 
21
- module.exports = downloadFile;
33
+ module.exports = downloadFile
@@ -1,29 +1,55 @@
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
+
6
+ /**
7
+ * @typedef EnvPHPData
8
+ *
9
+ * @prop {Record<string, number>} cache_types
10
+ * @prop {{ key: string }} crypt
11
+ */
5
12
 
6
13
  /**
7
14
  * @param {import('../../typings/context').ListrContext} ctx
15
+ * @returns {Promise<EnvPHPData | null>}
8
16
  */
9
17
  const envPhpToJson = async (ctx) => {
10
- const envPhpOnSystemPath = path.join(ctx.config.baseConfig.magentoDir, 'app', 'etc', 'env.php');
11
- const envPhpInContainerPath = path.join(ctx.config.baseConfig.containerMagentoDir, 'app', 'etc', 'env.php');
12
- if (!await pathExists(envPhpOnSystemPath)) {
13
- return null;
18
+ const envPhpOnSystemPath = path.join(
19
+ ctx.config.baseConfig.magentoDir,
20
+ 'app',
21
+ 'etc',
22
+ 'env.php'
23
+ )
24
+ const envPhpInContainerPath = path.join(
25
+ ctx.config.baseConfig.containerMagentoDir,
26
+ 'app',
27
+ 'etc',
28
+ 'env.php'
29
+ )
30
+ if (!(await pathExists(envPhpOnSystemPath))) {
31
+ return null
14
32
  }
15
- const { code, result } = await runPHPContainerCommand(ctx, `php -r "echo json_encode(require '${envPhpInContainerPath}');"`, {
16
- withCode: true
17
- });
33
+ const { code, result } = await runPHPContainerCommand(
34
+ ctx,
35
+ `php -r "echo json_encode(require '${envPhpInContainerPath}');"`,
36
+ {
37
+ withCode: true
38
+ }
39
+ )
18
40
 
19
41
  if (code !== 0) {
20
- throw new UnknownError(`Received non-zero code during converting app/etc/env.php to json:\n\n${result}`);
42
+ throw new UnknownError(
43
+ `Received non-zero code during converting app/etc/env.php to json:\n\n${result}`
44
+ )
21
45
  }
22
46
  try {
23
- return JSON.parse(result);
47
+ return JSON.parse(result)
24
48
  } catch (e) {
25
- throw new UnknownError(`Ooops! Something went wrong when trying to parse app/etc/env.php file!\n\n${e}\n\nFile result: ${result}`);
49
+ throw new UnknownError(
50
+ `Ooops! Something went wrong when trying to parse app/etc/env.php file!\n\n${e}\n\nFile result: ${result}`
51
+ )
26
52
  }
27
- };
53
+ }
28
54
 
29
- module.exports = envPhpToJson;
55
+ module.exports = envPhpToJson
@@ -1,7 +1,7 @@
1
- /* eslint-disable max-len */
2
- import { ListrTask } from 'listr2';
1
+ /* eslint-disable no-redeclare */
2
+ import { ListrTask } from 'listr2'
3
3
 
4
- import { ListrContext } from '../../typings/context';
4
+ import { ListrContext } from '../../typings/context'
5
5
 
6
6
  interface ExecAsyncSpawnOptions<T extends boolean> {
7
7
  callback?: (result: string) => void
@@ -9,9 +9,9 @@ interface ExecAsyncSpawnOptions<T extends boolean> {
9
9
  logOutput?: boolean
10
10
  cwd?: string
11
11
  withCode?: T
12
+ env?: Record<string, string> & NodeJS.ProcessEnv
12
13
  // only for mac
13
14
  useRosetta2?: boolean
14
- env: NodeJS.ProcessEnv
15
15
  }
16
16
 
17
17
  /**
@@ -20,13 +20,13 @@ interface ExecAsyncSpawnOptions<T extends boolean> {
20
20
  export function execAsyncSpawn(
21
21
  command: string,
22
22
  options?: ExecAsyncSpawnOptions<false>
23
- ): Promise<string>;
24
- export function execAsyncSpawn (
23
+ ): Promise<string>
24
+ export function execAsyncSpawn(
25
25
  command: string,
26
26
  options?: ExecAsyncSpawnOptions<true>
27
- ): Promise<{ code: number, result: string }>;
27
+ ): Promise<{ code: number; result: string }>
28
28
 
29
- export function execCommandTask(
29
+ export function execCommandTask<T extends boolean>(
30
30
  command: string,
31
- options?: Omit<ExecAsyncSpawnOptions<false>, 'callback'>
31
+ options?: Omit<ExecAsyncSpawnOptions<T>, 'callback'>
32
32
  ): ListrTask<ListrContext>
@@ -1,18 +1,24 @@
1
- const os = require('os');
2
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
3
- const { spawn } = require('child_process');
4
- const { getArchSync } = require('./arch');
5
- const UnknownError = require('../errors/unknown-error');
1
+ const os = require('os')
2
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
3
+ const { spawn } = require('child_process')
4
+ const { getArchSync } = require('./arch')
5
+ const UnknownError = require('../errors/unknown-error')
6
6
 
7
- const execAsyncSpawn = (command, {
8
- callback = () => {},
9
- pipeInput,
10
- logOutput = false,
11
- cwd,
12
- withCode = false,
13
- useRosetta2 = false,
14
- env = process.env
15
- } = {}) => {
7
+ /**
8
+ * @type {typeof import('./exec-async-command')['execAsyncSpawn']}
9
+ */
10
+ const execAsyncSpawn = (
11
+ command,
12
+ {
13
+ callback,
14
+ pipeInput,
15
+ logOutput = false,
16
+ cwd,
17
+ withCode = false,
18
+ useRosetta2 = false,
19
+ env = process.env
20
+ } = {}
21
+ ) => {
16
22
  /**
17
23
  * @type {import('child_process').SpawnOptionsWithoutStdio}
18
24
  */
@@ -20,81 +26,98 @@ const execAsyncSpawn = (command, {
20
26
  stdio: pipeInput ? ['inherit', 'pipe', 'pipe'] : 'pipe',
21
27
  cwd,
22
28
  env
23
- };
29
+ }
24
30
 
25
31
  /**
26
32
  * @type {import('child_process').ChildProcessWithoutNullStreams}
27
33
  */
28
- let childProcess;
29
- if (useRosetta2 && os.platform() === 'darwin' && getArchSync() === 'arm64') {
34
+ let childProcess
35
+ if (
36
+ useRosetta2 &&
37
+ os.platform() === 'darwin' &&
38
+ getArchSync() === 'arm64'
39
+ ) {
30
40
  childProcess = spawn(
31
41
  'arch',
32
- // eslint-disable-next-line max-len
33
42
  ['-x86_64', 'bash', '-c', command],
34
43
  spawnOptions
35
- );
44
+ )
36
45
  } else {
37
- childProcess = spawn(
38
- 'bash',
39
- ['-c', command],
40
- spawnOptions
41
- );
46
+ childProcess = spawn('bash', ['-c', command], spawnOptions)
42
47
  }
43
48
 
44
49
  return new Promise((resolve, reject) => {
45
- const chunks = [];
50
+ /**
51
+ * @type {Buffer[]}
52
+ */
53
+ const chunks = []
46
54
 
47
55
  /**
48
56
  * @param {Buffer} chunk
49
57
  */
50
58
  const addChunk = (chunk) => {
51
- chunks.push(Buffer.from(chunk));
52
- const newData = chunk.toString('utf-8');
53
- newData.split('\n').map((str) => str.trim()).forEach((str) => {
54
- callback(str);
55
- });
59
+ chunks.push(Buffer.from(chunk))
60
+ const newData = chunk.toString('utf-8')
61
+ newData
62
+ .split('\n')
63
+ .map((str) => str.trim())
64
+ .forEach((str) => {
65
+ callback && callback(str)
66
+ })
56
67
  if (logOutput) {
57
- newData.split('\n').filter(Boolean).forEach((line) => {
58
- logger.log(line);
59
- });
68
+ newData
69
+ .split('\n')
70
+ .filter(Boolean)
71
+ .forEach((line) => {
72
+ logger.log(line)
73
+ })
60
74
  }
61
- };
75
+ }
62
76
 
63
- childProcess.stdout.on('data', addChunk);
64
- childProcess.stderr.on('data', addChunk);
77
+ childProcess.stdout.on('data', addChunk)
78
+ childProcess.stderr.on('data', addChunk)
65
79
 
66
80
  childProcess.on('error', (error) => {
67
- reject(error);
68
- });
81
+ reject(error)
82
+ })
69
83
  childProcess.on('close', (code) => {
70
- const result = Buffer.concat(chunks).toString('utf8').trim();
71
- if (withCode) {
72
- resolve({ code, result });
73
- return;
84
+ const result = Buffer.concat(chunks).toString('utf8').trim()
85
+ if (typeof code === 'number') {
86
+ if (withCode) {
87
+ resolve({ code, result })
88
+ return
89
+ }
90
+ if (code > 0) {
91
+ reject(new UnknownError(result))
92
+ return
93
+ }
74
94
  }
75
- if (code > 0) {
76
- reject(new UnknownError(result));
77
- } else {
78
- resolve(result);
79
- }
80
- });
81
- });
82
- };
83
95
 
96
+ resolve(result)
97
+ })
98
+ })
99
+ }
100
+
101
+ /**
102
+ * @type {typeof import('./exec-async-command')['execCommandTask']}
103
+ */
84
104
  const execCommandTask = (command, options = {}) => ({
85
105
  title: `Running command "${command}"`,
86
- task: (ctx, task) => execAsyncSpawn(command, {
87
- callback: !ctx.verbose ? undefined : (t) => {
88
- task.output = t;
89
- },
90
- ...options
91
- }),
92
- option: {
106
+ task: (ctx, task) =>
107
+ execAsyncSpawn(command, {
108
+ callback: !ctx.verbose
109
+ ? undefined
110
+ : (t) => {
111
+ task.output = t
112
+ },
113
+ ...options
114
+ }),
115
+ options: {
93
116
  bottomBar: 10
94
117
  }
95
- });
118
+ })
96
119
 
97
120
  module.exports = {
98
121
  execAsyncSpawn,
99
122
  execCommandTask
100
- };
123
+ }
@@ -1,4 +1,6 @@
1
1
  /* eslint-disable max-len */
2
+ import { ExecOptions } from 'child_process'
3
+
2
4
  /**
3
5
  * Execute bash command
4
6
  * @param command Bash command
@@ -1,9 +1,16 @@
1
- const { exec } = require('child_process');
1
+ const { exec } = require('child_process')
2
2
 
3
- const execAsync = (command, options) => new Promise((resolve, reject) => {
4
- exec(command, options, (err, stdout) => (err ? reject(err) : resolve(stdout)));
5
- });
3
+ /**
4
+ * @param {string} command
5
+ * @param {{ encoding: 'buffer' | null; } & import('child_process').ExecOptions} options
6
+ */
7
+ const execAsync = (command, options) =>
8
+ new Promise((resolve, reject) => {
9
+ exec(command, options, (err, stdout) =>
10
+ err ? reject(err) : resolve(stdout)
11
+ )
12
+ })
6
13
 
7
14
  module.exports = {
8
15
  execAsync
9
- };
16
+ }
@@ -1,44 +1,39 @@
1
- const { spawn } = require('child_process');
2
- const { runCommand } = require('../tasks/docker/containers/container-api');
1
+ const { spawn } = require('child_process')
2
+ const { runCommand } = require('../tasks/docker/containers/container-api')
3
3
 
4
4
  /**
5
5
  * @param {{ containerName: string, commands: string[], user?: string }} param0
6
+ * @returns {Promise<never>}
6
7
  */
7
- const executeInContainer = ({
8
- containerName, commands, user
9
- }) => {
8
+ const executeInContainer = ({ containerName, commands, user }) => {
10
9
  if (!process.stdin.isTTY) {
11
- process.stderr.write('This app works only in TTY mode');
12
- process.exit(1);
10
+ process.stderr.write('This app works only in TTY mode')
11
+ process.exit(1)
13
12
  }
14
13
 
15
- const userArg = user && `--user=${user}`;
16
-
17
- spawn('docker', [
18
- 'exec',
19
- '-it',
20
- userArg,
21
- containerName
22
- ]
14
+ const userArg = (user && `--user=${user}`) || ''
15
+ const args = ['exec', '-it', userArg, containerName]
23
16
  .filter(Boolean)
24
- .concat(...commands.map((command) => command.split(' ')).flat()),
25
- {
17
+ .concat(...commands.map((command) => command.split(' ')).flat())
18
+
19
+ spawn('docker', args, {
26
20
  stdio: [0, 1, 2]
27
- });
21
+ })
28
22
 
29
23
  return new Promise((_resolve) => {
30
24
  // never resolve
31
- });
32
- };
25
+ })
26
+ }
33
27
 
34
28
  /**
35
29
  * @param {import('../tasks/docker/containers/container-api').ContainerRunOptions} options
36
30
  * @param {string[]} commands
31
+ * @returns {Promise<never>}
37
32
  */
38
33
  const runInContainer = (options, commands) => {
39
34
  if (!process.stdin.isTTY) {
40
- process.stderr.write('This app works only in TTY mode');
41
- process.exit(1);
35
+ process.stderr.write('This app works only in TTY mode')
36
+ process.exit(1)
42
37
  }
43
38
 
44
39
  const runArgs = runCommand({
@@ -47,16 +42,16 @@ const runInContainer = (options, commands) => {
47
42
  detach: false,
48
43
  rm: true,
49
44
  command: commands.join(' ')
50
- });
45
+ })
51
46
 
52
- spawn('bash', ['-c', runArgs.join(' ')], { stdio: [0, 1, 2] });
47
+ spawn('bash', ['-c', runArgs.join(' ')], { stdio: [0, 1, 2] })
53
48
 
54
49
  return new Promise((_resolve) => {
55
50
  // never resolve
56
- });
57
- };
51
+ })
52
+ }
58
53
 
59
54
  module.exports = {
60
55
  executeInContainer,
61
56
  runInContainer
62
- };
57
+ }
@@ -1,31 +1,27 @@
1
- const os = require('os');
2
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
3
- const { execCommandTask } = require('./exec-async-command');
1
+ const os = require('os')
2
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
3
+ const { execCommandTask } = require('./exec-async-command')
4
4
 
5
5
  /**
6
- * @type {(
7
- * command: string,
8
- * options: Omit<import('../util/exec-async-command').ExecAsyncSpawnOptions<false>, 'callback' | 'pipeInput'>
9
- * ) => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
6
+ * @type {<T extends boolean>(command: string, options?: Omit<import('../util/exec-async-command').ExecAsyncSpawnOptions<T>, 'pipeInput'>) => import('listr2').ListrTask<import('../../typings/context').ListrContext>}
10
7
  */
11
8
  const executeSudoCommand = (command, options = {}) => ({
12
9
  task: async (ctx, task) => {
13
- task.output = 'Enter your sudo password!';
14
- task.output = logger.style.command(`>[sudo] password for ${ os.userInfo().username }:`);
10
+ task.output = 'Enter your sudo password!'
11
+ task.output = logger.style.command(
12
+ `>[sudo] password for ${os.userInfo().username}:`
13
+ )
15
14
 
16
15
  return task.newListr(
17
16
  execCommandTask(command, {
18
- callback: (t) => {
19
- task.output = t;
20
- },
21
17
  pipeInput: true,
22
18
  ...options
23
19
  })
24
- );
20
+ )
25
21
  },
26
22
  options: {
27
23
  bottomBar: 10
28
24
  }
29
- });
25
+ })
30
26
 
31
- module.exports = executeSudoCommand;
27
+ module.exports = executeSudoCommand
@@ -1,57 +1,61 @@
1
- const { getArch, getArchSync } = require('./arch');
1
+ const { getArch, getArchSync } = require('./arch')
2
2
 
3
- const BREW_BIN_PATH_INTEL = '/usr/local/bin/brew';
4
- const BREW_BIN_PATH_ARM_ROSETTA = '/usr/local/homebrew/bin/brew';
3
+ const BREW_BIN_PATH_INTEL = '/usr/local/bin/brew'
4
+ const BREW_BIN_PATH_ARM_ROSETTA = '/usr/local/homebrew/bin/brew'
5
5
  // native is not used ATM
6
- const BREW_BIN_PATH_ARM_NATIVE = '/opt/homebrew/bin/brew';
6
+ const BREW_BIN_PATH_ARM_NATIVE = '/opt/homebrew/bin/brew'
7
7
 
8
8
  const getBrewBinPath = async () => {
9
- const arch = await getArch();
9
+ const arch = await getArch()
10
10
 
11
11
  if (arch === 'arm64') {
12
- return BREW_BIN_PATH_ARM_ROSETTA;
12
+ return BREW_BIN_PATH_ARM_ROSETTA
13
13
  }
14
14
 
15
- return BREW_BIN_PATH_INTEL;
16
- };
15
+ return BREW_BIN_PATH_INTEL
16
+ }
17
17
 
18
18
  const getBrewBinPathSync = () => {
19
- const arch = getArchSync();
19
+ const arch = getArchSync()
20
20
 
21
21
  if (arch === 'arm64') {
22
- return BREW_BIN_PATH_ARM_ROSETTA;
22
+ return BREW_BIN_PATH_ARM_ROSETTA
23
23
  }
24
24
 
25
- return BREW_BIN_PATH_INTEL;
26
- };
25
+ return BREW_BIN_PATH_INTEL
26
+ }
27
27
 
28
28
  const getBrewCommand = async ({ native } = { native: false }) => {
29
- const arch = await getArch();
29
+ const arch = await getArch()
30
30
 
31
31
  if (arch === 'arm64') {
32
32
  if (native) {
33
- return `arch -arm64 ${BREW_BIN_PATH_ARM_NATIVE}`;
33
+ return `arch -arm64 ${BREW_BIN_PATH_ARM_NATIVE}`
34
34
  }
35
35
 
36
- return `arch -x86_64 ${BREW_BIN_PATH_ARM_ROSETTA}`;
36
+ return `arch -x86_64 ${BREW_BIN_PATH_ARM_ROSETTA}`
37
37
  }
38
38
 
39
- return BREW_BIN_PATH_INTEL;
40
- };
39
+ return BREW_BIN_PATH_INTEL
40
+ }
41
41
 
42
+ /**
43
+ * @param {{ native?: boolean }} param0
44
+ * @returns
45
+ */
42
46
  const getBrewCommandSync = ({ native } = { native: false }) => {
43
- const arch = getArchSync();
47
+ const arch = getArchSync()
44
48
 
45
49
  if (arch === 'arm64') {
46
50
  if (native) {
47
- return `arch -arm64 ${BREW_BIN_PATH_ARM_NATIVE}`;
51
+ return `arch -arm64 ${BREW_BIN_PATH_ARM_NATIVE}`
48
52
  }
49
53
 
50
- return `arch -x86_64 ${BREW_BIN_PATH_ARM_ROSETTA}`;
54
+ return `arch -x86_64 ${BREW_BIN_PATH_ARM_ROSETTA}`
51
55
  }
52
56
 
53
- return BREW_BIN_PATH_INTEL;
54
- };
57
+ return BREW_BIN_PATH_INTEL
58
+ }
55
59
 
56
60
  module.exports = {
57
61
  getBrewBinPath,
@@ -61,4 +65,4 @@ module.exports = {
61
65
  BREW_BIN_PATH_INTEL,
62
66
  BREW_BIN_PATH_ARM_ROSETTA,
63
67
  BREW_BIN_PATH_ARM_NATIVE
64
- };
68
+ }
@@ -1,34 +1,40 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
- const KnownError = require('../errors/known-error');
4
- const pathExists = require('./path-exists');
5
-
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const KnownError = require('../errors/known-error')
4
+ const pathExists = require('./path-exists')
5
+
6
+ /**
7
+ * @param {string} composerPath
8
+ * @returns {Promise<{ require: Record<string, string> } | null>}
9
+ */
6
10
  const getComposerData = async (composerPath) => {
7
- const composerExists = await pathExists(composerPath);
11
+ const composerExists = await pathExists(composerPath)
8
12
 
9
13
  if (!composerExists) {
10
- return null;
14
+ return null
11
15
  }
12
16
 
13
- return JSON.parse(await fs.promises.readFile(composerPath, 'utf-8'));
14
- };
17
+ return JSON.parse(await fs.promises.readFile(composerPath, 'utf-8'))
18
+ }
15
19
 
16
20
  const getInstalledMagentoVersion = async (projectPath = process.cwd()) => {
17
- const composerData = await getComposerData(path.join(projectPath, 'composer.json'));
21
+ const composerData = await getComposerData(
22
+ path.join(projectPath, 'composer.json')
23
+ )
18
24
 
19
25
  if (!composerData) {
20
- throw new KnownError('composer.json not found');
26
+ throw new KnownError('composer.json not found')
21
27
  }
22
28
  const magentoDependency = [
23
29
  'magento/product-community-edition',
24
30
  'magento/product-enterprise-edition'
25
- ].find((magentoEdition) => composerData.require[magentoEdition]);
31
+ ].find((magentoEdition) => composerData.require[magentoEdition])
26
32
 
27
33
  if (!magentoDependency) {
28
- throw new KnownError('No Magento dependency found in composer.json');
34
+ throw new KnownError('No Magento dependency found in composer.json')
29
35
  }
30
36
 
31
- return composerData.require[magentoDependency].replace(/\^/i, '');
32
- };
37
+ return composerData.require[magentoDependency].replace(/\^/i, '')
38
+ }
33
39
 
34
- module.exports = getInstalledMagentoVersion;
40
+ module.exports = getInstalledMagentoVersion