@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,52 +1,62 @@
1
- /* eslint-disable no-bitwise */
2
- /* eslint-disable max-len */
1
+ /**
2
+ * @typedef {{ date: Date | null, timestamp: number | null, ip: number | null } & Record<string, string | null>} LogRow
3
+ */
4
+
3
5
  class NginxParser {
6
+ /**
7
+ * @param {String} format
8
+ */
4
9
  constructor(format) {
5
- this.directives = {};
10
+ /**
11
+ * @type {Record<string, number>}
12
+ */
13
+ this.directives = {}
6
14
 
7
- const prefix = format.match(/^[^$]*/);
15
+ const prefix = format.match(/^[^$]*/)
8
16
  if (prefix) {
9
- format = this.escape(prefix[0]) + format.slice(prefix[0].length);
17
+ format = this.escape(prefix[0]) + format.slice(prefix[0].length)
10
18
  }
11
19
 
12
- this.parser = format;
20
+ this.parser = format
13
21
 
14
- const directive = /\$([a-z_]+)(.)?([^$]+)?/g;
15
- let match;
16
- let regex;
17
- let boundary;
18
- let i = 1;
22
+ const directive = /\$([a-z_]+)(.)?([^$]+)?/g
23
+ let match
24
+ let regex
25
+ let boundary
26
+ let i = 1
19
27
 
20
- // eslint-disable-next-line no-cond-assign
21
28
  while ((match = directive.exec(format))) {
22
- this.directives[match[1]] = i++;
29
+ this.directives[match[1]] = i++
23
30
  if (match[2]) {
24
- boundary = this.escape(match[2]);
25
- regex = `([^${ boundary }]*?)${ boundary}`;
31
+ boundary = this.escape(match[2])
32
+ regex = `([^${boundary}]*?)${boundary}`
26
33
  if (match[3]) {
27
- regex += this.escape(match[3]);
34
+ regex += this.escape(match[3])
28
35
  }
29
36
  } else {
30
- regex = '(.+)$';
37
+ regex = '(.+)$'
31
38
  }
32
- this.parser = this.parser.replace(match[0], regex);
39
+ this.parser = this.parser.replace(match[0], regex)
33
40
  }
34
41
 
35
- this.parser = new RegExp(this.parser);
42
+ this.parser = new RegExp(this.parser)
36
43
  }
37
44
 
38
45
  /**
39
46
  * Parse a log line.
40
47
  *
41
48
  * @param {String} line
42
- * @returns {Record<'msec' | 'time_iso8601' | 'remote_addr' | 'query_string' | 'http_x_forwarded_for' | 'http_user_agent' | 'http_referer' | 'time_local' | 'request' | 'status' | 'request_time' | 'request_length' | 'pipe' | 'connection' | 'bytes_sent' | 'body_bytes_sent' | 'date' | 'timestamp' | 'ip' | 'ip_str', string>}
49
+ * @returns {LogRow | null}
43
50
  */
44
51
  parseLine(line) {
45
- const match = line.match(this.parser);
52
+ const match = line.match(this.parser)
46
53
  if (!match) {
47
- return;
54
+ return null
48
55
  }
49
56
 
57
+ /**
58
+ * @type {LogRow}
59
+ */
50
60
  const row = {
51
61
  msec: null,
52
62
  time_iso8601: null,
@@ -69,41 +79,41 @@ class NginxParser {
69
79
  timestamp: null,
70
80
  ip: null,
71
81
  ip_str: null
72
- };
82
+ }
73
83
 
74
- // eslint-disable-next-line guard-for-in
75
84
  for (const key in this.directives) {
76
- row[key] = match[this.directives[key]];
85
+ row[key] = match[this.directives[key]]
77
86
  if (row[key] === '-') {
78
- row[key] = null;
87
+ row[key] = null
79
88
  }
80
89
  }
81
90
 
82
91
  // Parse the timestamp
83
92
  if (row.time_iso8601) {
84
- row.date = new Date(row.time_iso8601);
93
+ row.date = new Date(row.time_iso8601)
85
94
  } else if (row.msec) {
86
- row.date = new Date(Number(row.msec.replace('.', '')));
95
+ row.date = new Date(Number(row.msec.replace('.', '')))
87
96
  }
88
97
  if (row.date) {
89
- row.timestamp = row.date.getTime();
98
+ row.timestamp = row.date.getTime()
90
99
  }
91
100
 
92
101
  // Parse the user's IP
93
102
  if (row.http_x_forwarded_for) {
94
- row.ip_str = row.http_x_forwarded_for;
103
+ row.ip_str = row.http_x_forwarded_for
95
104
  } else if (row.remote_addr) {
96
- row.ip_str = row.remote_addr;
105
+ row.ip_str = row.remote_addr
97
106
  }
98
107
  if (row.ip_str) {
99
- const ip = row.ip_str.split('.', 4);
100
- row.ip = Number(ip[0]) * (2 << 23)
101
- + Number(ip[1]) * (2 << 15)
102
- + Number(ip[2]) * (2 << 7)
103
- + Number(ip[3]);
108
+ const ip = row.ip_str.split('.', 4)
109
+ row.ip =
110
+ Number(ip[0]) * (2 << 23) +
111
+ Number(ip[1]) * (2 << 15) +
112
+ Number(ip[2]) * (2 << 7) +
113
+ Number(ip[3])
104
114
  }
105
115
 
106
- return row;
116
+ return row
107
117
  }
108
118
 
109
119
  /**
@@ -113,10 +123,11 @@ class NginxParser {
113
123
  * @return {String}
114
124
  */
115
125
  escape(str) {
116
- return str.replace(new RegExp('[.*+?|()\\[\\]{}]', 'g'), '\\$&');
126
+ // eslint-disable-next-line no-useless-escape
127
+ return str.replace(/[.*+?|()\[\]{}]/g, '\\$&')
117
128
  }
118
129
  }
119
130
 
120
131
  module.exports = {
121
132
  NginxParser
122
- };
133
+ }
@@ -1,9 +1,12 @@
1
- const { execAsync } = require('./exec-async');
1
+ const { execAsync } = require('./exec-async')
2
2
 
3
+ /**
4
+ * @param {string} url
5
+ */
3
6
  const openBrowser = async (url) => {
4
- const start = process.platform === 'darwin' ? 'open' : 'xdg-open';
7
+ const start = process.platform === 'darwin' ? 'open' : 'xdg-open'
5
8
 
6
- await execAsync(`${ start } ${ url }`);
7
- };
9
+ await execAsync(`${start} ${url}`)
10
+ }
8
11
 
9
- module.exports = openBrowser;
12
+ module.exports = openBrowser
@@ -1,51 +1,59 @@
1
- const fs = require('fs');
2
- const systeminformation = require('systeminformation');
3
- const pathExists = require('./path-exists');
4
- const dependenciesForPlatforms = require('../config/dependencies-for-platforms');
1
+ const fs = require('fs')
2
+ const systeminformation = require('systeminformation')
3
+ const pathExists = require('./path-exists')
4
+ const dependenciesForPlatforms = require('../config/dependencies-for-platforms')
5
5
 
6
6
  const packageManagers = Object.entries(dependenciesForPlatforms).map((d) => ({
7
7
  platform: d[0],
8
8
  packageManager: d[1].packageManager
9
- }));
9
+ }))
10
10
  /**
11
11
  *
12
12
  * @returns {Promise<keyof typeof dependenciesForPlatforms>}
13
13
  */
14
14
  const osPlatform = async () => {
15
- const binPaths = process.env.PATH.split(':');
15
+ const binPaths = process.env.PATH.split(':')
16
16
 
17
- const platforms = await Promise.all(binPaths.map(async (binPath) => {
18
- if (!await pathExists(binPath)) {
19
- return null;
20
- }
21
- const bins = await fs.promises.readdir(binPath);
22
-
23
- for (const bin of bins) {
24
- const possiblePlatforms = packageManagers.filter((p) => p.packageManager === bin);
17
+ const platforms = (
18
+ await Promise.all(
19
+ binPaths.map(async (binPath) => {
20
+ if (!(await pathExists(binPath))) {
21
+ return null
22
+ }
23
+ const bins = await fs.promises.readdir(binPath)
25
24
 
26
- if (possiblePlatforms.length > 0) {
27
- if (possiblePlatforms.length > 1) {
28
- const { distro } = await systeminformation.osInfo();
25
+ for (const bin of bins) {
26
+ const possiblePlatforms = packageManagers.filter(
27
+ (p) => p.packageManager === bin
28
+ )
29
29
 
30
- const foundDistro = possiblePlatforms.find((p) => p.platform.toLowerCase().includes(distro.toLowerCase()));
30
+ if (possiblePlatforms.length > 0) {
31
+ if (possiblePlatforms.length > 1) {
32
+ const { distro } = await systeminformation.osInfo()
31
33
 
32
- if (foundDistro) {
33
- return foundDistro.platform;
34
- }
34
+ const foundDistro = possiblePlatforms.find((p) =>
35
+ p.platform
36
+ .toLowerCase()
37
+ .includes(distro.toLowerCase())
38
+ )
35
39
 
36
- return possiblePlatforms[0].platform;
37
- }
40
+ if (foundDistro) {
41
+ return foundDistro.platform
42
+ }
38
43
 
39
- return possiblePlatforms[0].platform;
40
- }
41
- }
44
+ return possiblePlatforms[0].platform
45
+ }
42
46
 
43
- return null;
44
- }));
47
+ return possiblePlatforms[0].platform
48
+ }
49
+ }
45
50
 
46
- const filteredPlatforms = platforms.filter(Boolean);
51
+ return null
52
+ })
53
+ )
54
+ ).filter(Boolean)
47
55
 
48
- return filteredPlatforms.shift();
49
- };
56
+ return platforms.shift()
57
+ }
50
58
 
51
- module.exports = osPlatform;
59
+ module.exports = osPlatform
@@ -1,13 +1,17 @@
1
- const fs = require('fs');
1
+ const fs = require('fs')
2
2
 
3
+ /**
4
+ * @param {string} path
5
+ * @returns {boolean}
6
+ */
3
7
  const pathExistsSync = (path) => {
4
8
  try {
5
- fs.accessSync(path, fs.constants.F_OK);
9
+ fs.accessSync(path, fs.constants.F_OK)
6
10
  } catch (e) {
7
- return false;
11
+ return false
8
12
  }
9
13
 
10
- return true;
11
- };
14
+ return true
15
+ }
12
16
 
13
- module.exports = pathExistsSync;
17
+ module.exports = pathExistsSync
@@ -1,4 +1,4 @@
1
- const fs = require('fs');
1
+ const fs = require('fs')
2
2
 
3
3
  /**
4
4
  * Check if provided path exists in filesystem
@@ -7,12 +7,12 @@ const fs = require('fs');
7
7
  */
8
8
  const pathExists = async (path) => {
9
9
  try {
10
- await fs.promises.access(path, fs.constants.F_OK);
10
+ await fs.promises.access(path, fs.constants.F_OK)
11
11
  } catch (e) {
12
- return false;
12
+ return false
13
13
  }
14
14
 
15
- return true;
16
- };
15
+ return true
16
+ }
17
17
 
18
- module.exports = pathExists;
18
+ module.exports = pathExists
@@ -1,18 +1,19 @@
1
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
1
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
2
2
 
3
3
  /**
4
4
  * @param {String} command
5
- * @param {{ noTitle: boolean, env: Record<string, string> }} options
5
+ * @param {{ noTitle?: boolean, env?: Record<string, string> }} [options]
6
6
  * @returns {import('listr2').ListrTask<import('../../typings/context').ListrContext>}
7
7
  */
8
8
  const phpTask = (command, options = {}) => ({
9
9
  title: !options.noTitle ? `Running command 'php ${command}` : undefined,
10
- task: (ctx, task) => runPHPContainerCommand(ctx, command, {
11
- callback: (t) => {
12
- task.output = t;
13
- },
14
- throwNonZeroCode: true
15
- })
16
- });
10
+ task: (ctx, task) =>
11
+ runPHPContainerCommand(ctx, command, {
12
+ callback: (t) => {
13
+ task.output = t
14
+ },
15
+ withCode: true
16
+ })
17
+ })
17
18
 
18
- module.exports = phpTask;
19
+ module.exports = phpTask
@@ -1,10 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  /**
2
3
  * This is modified version of node-portscanner (https://github.com/baalexander/node-portscanner/blob/master/lib/portscanner.js)
3
4
  * with added option to ignore ports and reduced dependencies count
4
5
  */
5
- const net = require('net');
6
+ const net = require('net')
6
7
 
7
- const { Socket } = net;
8
+ const { Socket } = net
8
9
 
9
10
  /**
10
11
  * Checks the status of an individual port.
@@ -14,141 +15,152 @@ const { Socket } = net;
14
15
  * @param {Number} [options.timeout] - Connection timeout in ms.
15
16
  * @returns {Promise<string>}
16
17
  */
17
- const checkPortStatus = (port, options = {}) => new Promise((resolve, reject) => {
18
- const {
19
- host = '127.0.0.1',
20
- timeout = 400
21
- } = options;
22
-
23
- let connectionRefused = false;
24
-
25
- const socket = new Socket();
26
- let status = null;
27
- let error = null;
28
-
29
- // Socket connection established, port is open
30
- socket.on('connect', () => {
31
- status = 'open';
32
- socket.destroy();
33
- });
34
-
35
- // If no response, assume port is not listening
36
- socket.setTimeout(timeout);
37
- socket.on('timeout', () => {
38
- status = 'closed';
39
- error = new Error(`Timeout (${ timeout }ms) occurred waiting for ${ host }:${ port } to be available`);
40
- socket.destroy();
41
- });
42
-
43
- // Assuming the port is not open if an error. May need to refine based on
44
- // exception
45
- socket.on('error', (exception) => {
46
- if (exception.code !== 'ECONNREFUSED') {
47
- error = exception;
48
- } else {
49
- connectionRefused = true;
50
- }
51
- status = 'closed';
52
- });
53
-
54
- // Return after the socket has closed
55
- socket.on('close', (exception) => {
56
- if (exception && !connectionRefused) {
57
- error = error || exception;
58
- } else {
59
- error = null;
60
- }
61
- if (error) {
62
- return reject(error);
63
- }
64
-
65
- return resolve(status);
66
- });
67
-
68
- socket.connect(port, host);
69
- });
18
+ const checkPortStatus = (port, options = {}) =>
19
+ new Promise((resolve, reject) => {
20
+ const { host = '127.0.0.1', timeout = 400 } = options
21
+
22
+ let connectionRefused = false
23
+
24
+ const socket = new Socket()
25
+ /**
26
+ * @type {string}
27
+ */
28
+ let status
29
+
30
+ /**
31
+ * @type {Error | null}
32
+ */
33
+ let error
34
+
35
+ // Socket connection established, port is open
36
+ socket.on('connect', () => {
37
+ status = 'open'
38
+ socket.destroy()
39
+ })
40
+
41
+ // If no response, assume port is not listening
42
+ socket.setTimeout(timeout)
43
+ socket.on('timeout', () => {
44
+ status = 'closed'
45
+ error = new Error(
46
+ `Timeout (${timeout}ms) occurred waiting for ${host}:${port} to be available`
47
+ )
48
+ socket.destroy()
49
+ })
50
+
51
+ // Assuming the port is not open if an error. May need to refine based on
52
+ // exception
53
+ socket.on('error', (exception) => {
54
+ // @ts-ignore
55
+ if (exception.code !== 'ECONNREFUSED') {
56
+ error = exception
57
+ } else {
58
+ connectionRefused = true
59
+ }
60
+ status = 'closed'
61
+ })
62
+
63
+ // Return after the socket has closed
64
+ socket.on('close', (hadError) => {
65
+ if (hadError && !connectionRefused) {
66
+ error = new Error('Socket closed with an error!')
67
+ } else {
68
+ error = null
69
+ }
70
+ if (error) {
71
+ return reject(error)
72
+ }
73
+
74
+ return resolve(status)
75
+ })
76
+
77
+ socket.connect(port, host)
78
+ })
70
79
 
71
80
  /**
72
81
  * Internal helper function used by {@link findAPortInUse} and {@link findAPortNotInUse}
73
82
  * to find a port from a range or a list with a specific status.
74
83
  * @param {String} status - Status to check.
75
- * @param {Object} [options]
84
+ * @param {Object} options
76
85
  * @param {Number} options.startPort Port to begin status check on (inclusive).
77
86
  * @param {Number} options.endPort Last port to check status on (inclusive).
78
- * @param {String} options.host Host of where to scan.
79
- * @param {Number[]} options.portList Array of ports to check status on.
80
- * @param {Number[]} options.portIgnoreList Array of ports to check status on.
81
- * @returns {Promise<number>}
87
+ * @param {String} [options.host] Host of where to scan.
88
+ * @param {Number[]} [options.portList] Array of ports to check status on.
89
+ * @param {Number[]} [options.portIgnoreList] Array of ports to check status on.
90
+ * @returns {Promise<number | false>}
82
91
  */
83
- async function findAPortWithStatus(status, options = {}) {
92
+ async function findAPortWithStatus(status, options) {
84
93
  const {
85
94
  portList,
86
95
  startPort,
87
96
  endPort = 65535,
88
97
  host,
89
98
  portIgnoreList = []
90
- } = options;
99
+ } = options
91
100
 
92
- let foundPort = false;
93
- let numberOfPortsChecked = 0;
94
- let port = portList ? portList[0] : startPort;
101
+ let foundPort = false
102
+ let numberOfPortsChecked = 0
103
+ let port = portList ? portList[0] : startPort
95
104
 
96
105
  // Returns true if a port with matching status has been found or if checked
97
106
  // the entire range of ports
98
- const hasFoundPort = () => foundPort || numberOfPortsChecked === (portList ? portList.length : endPort - startPort + 1);
107
+ const hasFoundPort = () =>
108
+ foundPort ||
109
+ numberOfPortsChecked ===
110
+ (portList ? portList.length : endPort - startPort + 1)
99
111
 
100
112
  // Checks the status of the port
101
113
  const checkNextPort = async () => {
102
114
  if (portIgnoreList.includes(port)) {
103
- numberOfPortsChecked++;
104
- port = portList ? portList[numberOfPortsChecked] : port + 1;
105
- return;
115
+ numberOfPortsChecked++
116
+ port = portList ? portList[numberOfPortsChecked] : port + 1
117
+ return
106
118
  }
107
- const statusOfPort = await checkPortStatus(port, { host });
119
+ const statusOfPort = await checkPortStatus(port, { host })
108
120
  if (statusOfPort === status) {
109
- foundPort = true;
110
- return;
121
+ foundPort = true
122
+ return
111
123
  }
112
- numberOfPortsChecked++;
113
- port = portList ? portList[numberOfPortsChecked] : port + 1;
114
- };
124
+ numberOfPortsChecked++
125
+ port = portList ? portList[numberOfPortsChecked] : port + 1
126
+ }
115
127
 
116
128
  while (!hasFoundPort()) {
117
- await checkNextPort();
129
+ await checkNextPort()
118
130
  }
119
131
 
120
132
  if (foundPort) {
121
- return port;
133
+ return port
122
134
  }
123
135
 
124
- return false;
136
+ return false
125
137
  }
126
138
 
127
139
  /**
128
140
  * Finds the first port with a status of 'open', implying the port is in use and
129
141
  * there is likely a service listening on it.
130
- * @param {Object} [options]
142
+ * @param {Object} options
131
143
  * @param {Number} options.startPort Port to begin status check on (inclusive).
132
144
  * @param {Number} options.endPort Last port to check status on (inclusive).
133
145
  * @param {String} options.host Host of where to scan.
134
146
  * @param {Number[]} options.portList Array of ports to check status on.
135
147
  * @param {Number[]} options.portIgnoreList Array of ports to check status on.
136
148
  */
137
- const findAPortInUse = (options) => findAPortWithStatus('open', options);
149
+ const findAPortInUse = (options) => findAPortWithStatus('open', options)
138
150
 
139
151
  /**
140
152
  * Finds the first port with a status of 'closed', implying the port is not in
141
- * @param {Object} [options]
153
+ * @param {Object} options
142
154
  * @param {Number} options.startPort Port to begin status check on (inclusive).
143
155
  * @param {Number} options.endPort Last port to check status on (inclusive).
144
- * @param {String} options.host Host of where to scan.
145
- * @param {Number[]} options.portList Array of ports to check status on.
156
+ * @param {String} [options.host] Host of where to scan.
157
+ * @param {Number[]} [options.portList] Array of ports to check status on.
146
158
  * @param {Number[]} options.portIgnoreList Array of ports to check status on.
147
159
  */
148
- const findAPortNotInUse = (options) => findAPortWithStatus('closed', options);
160
+ const findAPortNotInUse = (options) => findAPortWithStatus('closed', options)
149
161
 
150
162
  module.exports = {
151
163
  findAPortInUse,
152
164
  findAPortNotInUse,
153
165
  checkPortStatus
154
- };
166
+ }