@scandipwa/magento-scripts 2.0.3-alpha.0 → 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 +258 -173
  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 +49 -34
  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 +174 -108
  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 -46
  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 +64 -71
  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 +41 -38
  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,95 +1,132 @@
1
- const path = require('path');
2
- const os = require('os');
3
- const { DockerFileBuilder } = require('../../util/dockerfile-builder');
4
- const { execAsyncSpawn } = require('../../util/exec-async-command');
5
- const KnownError = require('../../errors/known-error');
6
- const { runContainerImage } = require('../../util/run-container-image');
7
- const { imageApi } = require('./image');
1
+ const path = require('path')
2
+ const os = require('os')
3
+ const { DockerFileBuilder } = require('../../util/dockerfile-builder')
4
+ const { execAsyncSpawn } = require('../../util/exec-async-command')
5
+ const KnownError = require('../../errors/known-error')
6
+ const { runContainerImage } = require('../../util/run-container-image')
7
+ const { imageApi } = require('./image')
8
8
 
9
9
  /**
10
10
  * Get enabled extensions list with versions
11
11
  * @param {string} imageWithTag
12
- * @returns {Promise<{[key: string]: string}}>}
12
+ * @returns {Promise<{[key: string]: string}>}>}
13
13
  */
14
14
  const getEnabledExtensionsFromImage = async (imageWithTag) => {
15
15
  const output = await runContainerImage(
16
16
  imageWithTag,
17
- // eslint-disable-next-line quotes
17
+
18
18
  `php -r 'foreach (get_loaded_extensions() as $extension) echo "$extension:" . phpversion($extension) . "\n";'`
19
- );
19
+ )
20
20
 
21
21
  return output
22
22
  .split('\n')
23
23
  .map((m) => {
24
- // eslint-disable-next-line no-unused-vars
25
- const [_, moduleName, moduleVersion] = m.match(/(.+):(.+)/i);
24
+ const moduleMatch = m.match(/(.+):(.+)/i)
25
+
26
+ if (moduleMatch) {
27
+ const [_, moduleName, moduleVersion] = moduleMatch
28
+
29
+ return [moduleName, moduleVersion]
30
+ }
26
31
 
27
- return [moduleName, moduleVersion];
32
+ return []
28
33
  })
29
- .reduce((acc, [name, version]) => ({ ...acc, [name]: version }), {});
30
- };
31
-
32
- const addExtensionToBuilder = (builder, ctx) => async ([extensionName, extensionInstructions]) => {
33
- const { command, ...extensionInstructionsWithoutCommand } = extensionInstructions;
34
- let runCommand = '';
35
- if (typeof command === 'string') {
36
- runCommand += ` ${command}`;
37
- } else if (typeof command === 'function' || command instanceof Promise) {
38
- runCommand += ` ${await Promise.resolve(command({ ...extensionInstructionsWithoutCommand, ctx }))}`;
39
- } else {
40
- runCommand += ` docker-php-ext-install ${extensionInstructionsWithoutCommand.name || extensionName}`;
34
+ .filter((a) => a.length > 0)
35
+ .reduce((acc, [name, version]) => ({ ...acc, [name]: version }), {})
36
+ }
37
+
38
+ /**
39
+ * @type {(builder: DockerFileBuilder, ctx: import('../../../typings/context').ListrContext) => ([extensionName, extensionInstructions]: [string, import('../../../typings').PHPExtensionInstallationInstruction]) => Promise<void>}
40
+ */
41
+ const addExtensionToBuilder =
42
+ (builder, ctx) =>
43
+ async ([extensionName, extensionInstructions]) => {
44
+ const { command, ...extensionInstructionsWithoutCommand } =
45
+ extensionInstructions
46
+ let runCommand = ''
47
+ if (typeof command === 'string') {
48
+ runCommand += ` ${command}`
49
+ } else if (command instanceof Promise) {
50
+ runCommand += ` ${await Promise.resolve(
51
+ command({ ...extensionInstructionsWithoutCommand, ctx })
52
+ )}`
53
+ } else {
54
+ runCommand += ` docker-php-ext-install ${
55
+ extensionInstructionsWithoutCommand.name || extensionName
56
+ }`
57
+ }
58
+ builder
59
+ .comment(`extension ${extensionName} installation command`)
60
+ .run(runCommand.trim())
41
61
  }
42
- builder
43
- .comment(`extension ${extensionName} installation command`)
44
- .run(runCommand.trim());
45
- };
46
62
 
47
63
  /**
48
64
  * @param {import('../../../typings/context').ListrContext} ctx
49
65
  * @param {{ image: string, tag: string}} param1
50
66
  */
51
67
  const buildDockerFileInstructions = async (ctx, { image, tag }) => {
52
- const { composer } = ctx.config.overridenConfiguration.configuration;
53
- const existingPHPExtensions = await getEnabledExtensionsFromImage(`${image}:${tag}`);
54
- const imageDetails = await imageApi.inspect({ image: `${image}:${tag}`, formatToJSON: true });
68
+ const { composer } = ctx.config.overridenConfiguration.configuration
69
+ const existingPHPExtensions = await getEnabledExtensionsFromImage(
70
+ `${image}:${tag}`
71
+ )
72
+ const imageDetails = await imageApi.inspect({
73
+ image: `${image}:${tag}`,
74
+ formatToJSON: true
75
+ })
55
76
 
56
77
  const missingExtensions = Object.entries(
57
78
  ctx.config.overridenConfiguration.configuration.php.extensions
58
- ).filter(
59
- ([extensionName, extensionInstructions]) => !Object.entries(existingPHPExtensions)
60
- .map(([n, i]) => [n.toLowerCase(), i])
61
- .some(
62
- ([n]) => extensionName === n || (
63
- extensionInstructions.alternativeName && extensionInstructions.alternativeName.map(
64
- (s) => s.toLowerCase()
65
- ).includes(n)
66
- )
67
- )
68
- ).filter(([extensionName]) => extensionName.toLowerCase() !== 'xdebug');
79
+ )
80
+ .filter(
81
+ ([extensionName, extensionInstructions]) =>
82
+ !Object.entries(existingPHPExtensions)
83
+ .map(([n, i]) => [n.toLowerCase(), i])
84
+ .some(
85
+ ([n]) =>
86
+ extensionName === n ||
87
+ (extensionInstructions.alternativeName &&
88
+ extensionInstructions.alternativeName
89
+ .map((s) => s.toLowerCase())
90
+ .includes(n))
91
+ )
92
+ )
93
+ .filter(([extensionName]) => extensionName.toLowerCase() !== 'xdebug')
69
94
 
70
95
  const dockerFileInstructions = new DockerFileBuilder()
71
96
  .comment('project image')
72
- .from({ image, tag });
97
+ .from({ image, tag })
73
98
 
74
99
  if (missingExtensions.length > 0) {
75
- const allDependencies = missingExtensions.map(
76
- ([_extensionName, extensionInstructions]) => (extensionInstructions.dependencies || [])
77
- )
78
- .reduce((acc, val) => acc.concat(val.filter((ex) => !acc.includes(ex))), []);
100
+ const allDependencies = missingExtensions
101
+ .map(
102
+ ([_extensionName, extensionInstructions]) =>
103
+ extensionInstructions.dependencies || []
104
+ )
105
+ .reduce(
106
+ (acc, val) => acc.concat(val.filter((ex) => !acc.includes(ex))),
107
+ []
108
+ )
79
109
 
80
- dockerFileInstructions.run(`apk add --no-cache ${allDependencies.join(' ')}`);
110
+ dockerFileInstructions.run(
111
+ `apk add --no-cache ${allDependencies.join(' ')}`
112
+ )
81
113
  for (const missingExtensionInstructions of missingExtensions) {
82
- await addExtensionToBuilder(dockerFileInstructions, ctx)(missingExtensionInstructions);
114
+ await addExtensionToBuilder(
115
+ dockerFileInstructions,
116
+ ctx
117
+ )(missingExtensionInstructions)
83
118
  }
84
119
  }
85
120
 
86
121
  const composerVersion = /^\d$/.test(composer.version)
87
122
  ? `latest-${composer.version}.x`
88
- : composer.version;
123
+ : composer.version
89
124
 
90
125
  dockerFileInstructions
91
126
  .comment('download composer')
92
- .run(`curl https://getcomposer.org/download/${composerVersion}/composer.phar --output composer`)
127
+ .run(
128
+ `curl https://getcomposer.org/download/${composerVersion}/composer.phar --output composer`
129
+ )
93
130
  .comment('make composer executable')
94
131
  .run('chmod +x ./composer')
95
132
  .comment('move composer to bin directory')
@@ -98,112 +135,141 @@ const buildDockerFileInstructions = async (ctx, { image, tag }) => {
98
135
  .env({
99
136
  COMPOSER_HOME: '/composer/home',
100
137
  COMPOSER_CACHE_DIR: '/composer/home/cache'
101
- });
138
+ })
102
139
 
103
140
  if (composer.plugins && Object.values(composer.plugins).length > 0) {
104
- for (const [pluginName, pluginOptions] of Object.entries(composer.plugins)) {
141
+ for (const [pluginName, pluginOptions] of Object.entries(
142
+ composer.plugins
143
+ )) {
105
144
  if (pluginOptions.enabled) {
106
145
  dockerFileInstructions
107
146
  .comment(`install ${pluginName} composer global package`)
108
- // eslint-disable-next-line max-len
109
- .run(`composer global require ${pluginName}${ pluginOptions.options ? ` ${pluginOptions.options}` : '' }${ pluginOptions.options ? ` ${pluginOptions.options}` : ''}`);
147
+
148
+ .run(
149
+ `composer global require ${pluginName}${
150
+ pluginOptions.options
151
+ ? ` ${pluginOptions.options}`
152
+ : ''
153
+ }${
154
+ pluginOptions.options
155
+ ? ` ${pluginOptions.options}`
156
+ : ''
157
+ }`
158
+ )
110
159
  }
111
160
  }
112
161
  }
113
162
 
114
163
  if (!ctx.isDockerDesktop) {
115
- dockerFileInstructions
116
- .run(`chown -R ${os.userInfo().uid}:${os.userInfo().gid} /composer/home`);
164
+ dockerFileInstructions.run(
165
+ `chown -R ${os.userInfo().uid}:${os.userInfo().gid} /composer/home`
166
+ )
117
167
  }
118
168
 
119
- dockerFileInstructions
120
- .workDir(ctx.config.baseConfig.containerMagentoDir);
169
+ dockerFileInstructions.workDir(ctx.config.baseConfig.containerMagentoDir)
121
170
 
122
- const imagePathEnv = imageDetails.Config.Env.find((env) => env.startsWith('PATH'));
123
- const magentoBinDir = path.join(ctx.config.baseConfig.containerMagentoDir, 'bin');
124
- const vendorBinDir = path.join(ctx.config.baseConfig.containerMagentoDir, 'vendor', 'bin');
171
+ const imagePathEnv = imageDetails.Config.Env.find((env) =>
172
+ env.startsWith('PATH')
173
+ )
174
+ const magentoBinDir = path.join(
175
+ ctx.config.baseConfig.containerMagentoDir,
176
+ 'bin'
177
+ )
178
+ const vendorBinDir = path.join(
179
+ ctx.config.baseConfig.containerMagentoDir,
180
+ 'vendor',
181
+ 'bin'
182
+ )
125
183
 
126
- dockerFileInstructions
127
- .env({
128
- PATH: `${ imagePathEnv.split('=').pop() }:${ magentoBinDir }:${vendorBinDir }`
129
- });
130
-
131
- if (ctx.config.overridenConfiguration.configuration.newRelic.enabled) {
132
- const { agentVersion, licenseKey } = ctx.config.overridenConfiguration.configuration.newRelic;
133
-
134
- dockerFileInstructions
135
- .run('apk add --no-cache gcompat')
136
- // eslint-disable-next-line max-len
137
- .run(`curl -L https://download.newrelic.com/php_agent/archive/${agentVersion}/newrelic-php5-${agentVersion}-linux.tar.gz | tar -C /tmp -zx \
138
- && export NR_INSTALL_USE_CP_NOT_LN=1 \
139
- && export NR_INSTALL_SILENT=1 \
140
- && /tmp/newrelic-php5-${agentVersion}-linux/newrelic-install install \
141
- && rm -rf /tmp/newrelic-php5-* /tmp/nrinstall*`)
142
- .run(`sed -i -e "s/REPLACE_WITH_REAL_KEY/${licenseKey}/" \
143
- -e "s/newrelic.appname[[:space:]]=[[:space:]].*/newrelic.appname=\\"${ctx.config.baseConfig.prefix}\\"/" \
144
- -e '\\$anewrelic.daemon.address="${ ctx.isDockerDesktop ? 'host.docker.internal' : 'localhost' }:31339"' \
145
- \\$PHP_INI_DIR/conf.d/newrelic.ini`);
184
+ if (imagePathEnv) {
185
+ dockerFileInstructions.env({
186
+ PATH: `${imagePathEnv
187
+ .split('=')
188
+ .pop()}:${magentoBinDir}:${vendorBinDir}`
189
+ })
146
190
  }
147
191
 
148
- return dockerFileInstructions;
149
- };
192
+ return dockerFileInstructions
193
+ }
150
194
 
151
195
  /**
152
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
196
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
153
197
  */
154
198
  const buildProjectImage = () => ({
155
199
  title: 'Building Project Image',
156
200
  task: async (ctx, task) => {
157
- const containers = ctx.config.docker.getContainers(ctx.ports);
158
- const [image, tag = 'latest'] = ctx.config.overridenConfiguration.configuration.php.baseImage.split(':');
159
- const dockerFileInstructions = await buildDockerFileInstructions(ctx, { image, tag });
201
+ const containers = ctx.config.docker.getContainers(ctx.ports)
202
+ const [image, tag = 'latest'] =
203
+ ctx.config.overridenConfiguration.configuration.php.baseImage.split(
204
+ ':'
205
+ )
206
+ const dockerFileInstructions = await buildDockerFileInstructions(ctx, {
207
+ image,
208
+ tag
209
+ })
160
210
 
161
211
  try {
162
- await execAsyncSpawn(`docker build -t ${containers.php.image} -<<EOF
212
+ await execAsyncSpawn(
213
+ `docker build -t ${containers.php.image} -<<EOF
163
214
  ${dockerFileInstructions.build()}
164
- EOF`, {
165
- callback: (r) => {
166
- task.output = r;
215
+ EOF`,
216
+ {
217
+ callback: (r) => {
218
+ task.output = r
219
+ }
167
220
  }
168
- });
221
+ )
169
222
  } catch (e) {
170
- throw new KnownError(`Unexpected error during project image building!\n\n${e}`);
223
+ throw new KnownError(
224
+ `Unexpected error during project image building!\n\n${e}`
225
+ )
171
226
  }
172
227
  },
173
228
  options: {
174
229
  bottomBar: 10
175
230
  }
176
- });
231
+ })
177
232
 
178
233
  /**
179
- * @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
234
+ * @returns {import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
180
235
  */
181
236
  const buildDebugProjectImage = () => ({
182
237
  title: 'Building Debug Project Image',
183
238
  task: async (ctx, task) => {
184
- const containers = ctx.config.docker.getContainers(ctx.ports);
185
- const [image, tag = 'latest'] = ctx.config.overridenConfiguration.configuration.php.debugImage.split(':');
186
- const dockerFileInstructions = await buildDockerFileInstructions(ctx, { image, tag });
239
+ const containers = ctx.config.docker.getContainers(ctx.ports)
240
+ const [image, tag = 'latest'] =
241
+ ctx.config.overridenConfiguration.configuration.php.debugImage.split(
242
+ ':'
243
+ )
244
+ const dockerFileInstructions = await buildDockerFileInstructions(ctx, {
245
+ image,
246
+ tag
247
+ })
187
248
 
188
249
  try {
189
- await execAsyncSpawn(`docker build -t ${containers.php.debugImage} -<<EOF
250
+ await execAsyncSpawn(
251
+ `docker build -t ${containers.php.debugImage} -<<EOF
190
252
  ${dockerFileInstructions.build()}
191
- EOF`, {
192
- callback: (r) => {
193
- task.output = r;
253
+ EOF`,
254
+ {
255
+ callback: (r) => {
256
+ task.output = r
257
+ }
194
258
  }
195
- });
259
+ )
196
260
  } catch (e) {
197
- throw new KnownError(`Unexpected error during debug project image building!\n\n${e}`);
261
+ throw new KnownError(
262
+ `Unexpected error during debug project image building!\n\n${e}`
263
+ )
198
264
  }
199
265
  },
200
266
  options: {
201
267
  bottomBar: 10
202
268
  }
203
- });
269
+ })
204
270
 
205
271
  module.exports = {
206
272
  buildProjectImage,
207
273
  buildDebugProjectImage,
208
274
  getEnabledExtensionsFromImage
209
- };
275
+ }
@@ -1,5 +1,5 @@
1
- const systemApi = require('./system-api');
1
+ const systemApi = require('./system-api')
2
2
 
3
3
  module.exports = {
4
4
  systemApi
5
- };
5
+ }
@@ -1,4 +1,4 @@
1
- import { ExecAsyncSpawnOptions } from '../../../util/exec-async-command';
1
+ import { ExecAsyncSpawnOptions } from '../../../util/exec-async-command'
2
2
 
3
3
  export interface SystemDFOptions<T extends boolean = false> {
4
4
  format?: string
@@ -30,7 +30,7 @@ export interface SystemDFResult {
30
30
  Mounts: string
31
31
  Names: string
32
32
  Networks: string
33
- Ports: StreamPipeOptions
33
+ Ports: string
34
34
  RunningFor: string
35
35
  Size: string
36
36
  State: string
@@ -1,35 +1,32 @@
1
- const { execAsyncSpawn } = require('../../../util/exec-async-command');
1
+ const { execAsyncSpawn } = require('../../../util/exec-async-command')
2
2
 
3
3
  /**
4
4
  * @param {import('./system-api').SystemDFOptions} options
5
5
  * @param {import('../../../util/exec-async-command').ExecAsyncSpawnOptions} execOptions
6
6
  */
7
7
  const df = async (options, execOptions = {}) => {
8
- const {
9
- format,
10
- formatToJSON,
11
- verbose
12
- } = options;
8
+ const { format, formatToJSON, verbose } = options
13
9
 
14
- const formatArg = !formatToJSON && format
15
- ? `--format=${format}`
16
- : formatToJSON && '--format=\'{{json .}}\'';
17
- const verboseArg = verbose && '--verbose';
10
+ const formatArg =
11
+ !formatToJSON && format
12
+ ? `--format=${format}`
13
+ : formatToJSON && "--format='{{json .}}'"
14
+ const verboseArg = verbose && '--verbose'
18
15
 
19
- const args = [
20
- formatArg,
21
- verboseArg
22
- ].filter(Boolean).join(' ');
16
+ const args = [formatArg, verboseArg].filter(Boolean).join(' ')
23
17
 
24
18
  if (formatToJSON) {
25
- const result = await execAsyncSpawn(`docker system df ${args}`, execOptions);
19
+ const result = await execAsyncSpawn(
20
+ `docker system df ${args}`,
21
+ execOptions
22
+ )
26
23
 
27
- return JSON.parse(result);
24
+ return JSON.parse(result)
28
25
  }
29
26
 
30
- return execAsyncSpawn(`docker system df ${args}`, execOptions);
31
- };
27
+ return execAsyncSpawn(`docker system df ${args}`, execOptions)
28
+ }
32
29
 
33
30
  module.exports = {
34
31
  df
35
- };
32
+ }
@@ -1,9 +1,9 @@
1
- const volumeApi = require('./volume-api');
2
- const { createVolumes, removeVolumes, removeLocalVolumes } = require('./tasks');
1
+ const volumeApi = require('./volume-api')
2
+ const { createVolumes, removeVolumes, removeLocalVolumes } = require('./tasks')
3
3
 
4
4
  module.exports = {
5
5
  createVolumes,
6
6
  removeVolumes,
7
7
  removeLocalVolumes,
8
8
  volumeApi
9
- };
9
+ }
@@ -1,107 +1,124 @@
1
- const fs = require('fs');
2
- const pathExists = require('../../../util/path-exists');
3
- const { containerApi } = require('../containers');
4
- const volumeApi = require('./volume-api');
1
+ const fs = require('fs')
2
+ const pathExists = require('../../../util/path-exists')
3
+ const { containerApi } = require('../containers')
4
+ const volumeApi = require('./volume-api')
5
5
 
6
6
  /**
7
- * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
7
+ * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
8
8
  */
9
9
  const createVolumes = () => ({
10
10
  title: 'Creating volumes',
11
11
  task: async ({ config: { docker } }, task) => {
12
12
  const volumeList = await volumeApi.ls({
13
13
  formatToJSON: true
14
- });
14
+ })
15
15
 
16
16
  const missingVolumes = Object.values(docker.volumes).filter(
17
17
  ({ name }) => !volumeList.some((v) => v.Name === name)
18
- );
18
+ )
19
19
 
20
20
  if (missingVolumes.length === 0) {
21
- task.skip();
22
- return;
21
+ task.skip()
22
+ return
23
23
  }
24
24
 
25
- await Promise.all(missingVolumes.map(async (volume) => {
26
- if (volume.opt && volume.opt.device && !await pathExists(volume.opt.device)) {
27
- await fs.promises.mkdir(volume.opt.device, {
28
- recursive: true
29
- });
30
- }
31
- }));
25
+ await Promise.all(
26
+ missingVolumes.map(async (volume) => {
27
+ if (
28
+ volume.opt &&
29
+ volume.opt.device &&
30
+ !(await pathExists(volume.opt.device))
31
+ ) {
32
+ await fs.promises.mkdir(volume.opt.device, {
33
+ recursive: true
34
+ })
35
+ }
36
+ })
37
+ )
32
38
 
33
- await Promise.all(missingVolumes.map((volume) => volumeApi.create(volume)));
39
+ await Promise.all(
40
+ missingVolumes.map((volume) => volumeApi.create(volume))
41
+ )
34
42
  }
35
- });
43
+ })
36
44
 
37
45
  /**
38
- * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
46
+ * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
39
47
  */
40
48
  const removeVolumes = () => ({
41
49
  title: 'Removing volumes',
42
50
  task: async ({ config: { docker } }, task) => {
43
51
  const volumeList = await volumeApi.ls({
44
52
  formatToJSON: true
45
- });
53
+ })
46
54
 
47
55
  const deployedVolumes = Object.values(docker.volumes).filter(
48
56
  ({ name }) => volumeList.some((v) => v.Name === name)
49
- );
57
+ )
50
58
 
51
59
  if (deployedVolumes.length === 0) {
52
- task.skip();
53
- return;
60
+ task.skip()
61
+ return
54
62
  }
55
63
 
56
64
  await volumeApi.rm({
57
65
  volumes: deployedVolumes.map(({ name }) => name)
58
- });
66
+ })
59
67
  }
60
- });
68
+ })
61
69
 
62
70
  /**
63
- * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
71
+ * @returns {import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
64
72
  */
65
73
  const removeLocalVolumes = () => ({
66
74
  title: 'Removing local volumes',
67
75
  task: async (ctx, task) => {
68
76
  const volumeList = await volumeApi.ls({
69
77
  formatToJSON: true
70
- });
71
- const { volumes } = ctx.config.docker;
78
+ })
79
+ const { volumes } = ctx.config.docker
72
80
 
73
81
  const localVolumes = Object.values(volumes).filter(
74
82
  (volume) => volume.opt && volume.opt.device
75
- );
83
+ )
76
84
 
77
- const existingLocalVolumes = localVolumes.filter(
78
- (volume) => volumeList.some((v) => v.Name === volume.name)
79
- );
85
+ const existingLocalVolumes = localVolumes.filter((volume) =>
86
+ volumeList.some((v) => v.Name === volume.name)
87
+ )
80
88
 
81
89
  if (existingLocalVolumes.length > 0) {
82
90
  const existingLocalVolumesDetails = await Promise.all(
83
- existingLocalVolumes.map((v) => volumeApi.inspect({ volume: v.name, formatToJSON: true }))
84
- );
91
+ existingLocalVolumes.map((v) =>
92
+ volumeApi.inspect({ volume: v.name, formatToJSON: true })
93
+ )
94
+ )
85
95
 
86
- await Promise.all(existingLocalVolumesDetails.map(async (v) => {
87
- if (v.Containers && Object.entries(v.Containers).length > 0) {
88
- await Promise.all(Object.values(v.Containers).map(async (c) => {
89
- await containerApi.stop([c.Name]);
90
- await containerApi.rm([c.Name]);
91
- }));
92
- }
93
- }));
96
+ await Promise.all(
97
+ existingLocalVolumesDetails.map(async (v) => {
98
+ if (
99
+ v.Containers &&
100
+ Object.entries(v.Containers).length > 0
101
+ ) {
102
+ await Promise.all(
103
+ Object.values(v.Containers).map(async (c) => {
104
+ await containerApi.stop([c.Name])
105
+ await containerApi.rm([c.Name])
106
+ })
107
+ )
108
+ }
109
+ })
110
+ )
94
111
  await volumeApi.rm({
95
112
  volumes: existingLocalVolumes.map((volume) => volume.name)
96
- });
113
+ })
97
114
  } else {
98
- task.skip();
115
+ task.skip()
99
116
  }
100
117
  }
101
- });
118
+ })
102
119
 
103
120
  module.exports = {
104
121
  createVolumes,
105
122
  removeVolumes,
106
123
  removeLocalVolumes
107
- };
124
+ }