@scandipwa/magento-scripts 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/.eslintrc +6 -1
  2. package/exec.js +75 -39
  3. package/index.js +87 -46
  4. package/lib/commands/cleanup.js +18 -21
  5. package/lib/commands/cli.js +138 -73
  6. package/lib/commands/execute.js +5 -5
  7. package/lib/commands/import-db.js +21 -24
  8. package/lib/commands/link.js +17 -20
  9. package/lib/commands/logs.js +91 -91
  10. package/lib/commands/start.js +229 -191
  11. package/lib/commands/status.js +64 -50
  12. package/lib/commands/stop.js +14 -11
  13. package/lib/config/check-configuration-file.js +33 -28
  14. package/lib/config/cma-config.js +4 -4
  15. package/lib/config/config.js +40 -18
  16. package/lib/config/dependencies-for-platforms.js +33 -3
  17. package/lib/config/docker.js +259 -160
  18. package/lib/config/get-magento-version-config.js +45 -38
  19. package/lib/config/get-port-config.js +30 -44
  20. package/lib/config/get-project-configuration.js +8 -8
  21. package/lib/config/index.js +51 -42
  22. package/lib/config/magento/required-php-extensions/index.js +33 -19
  23. package/lib/config/magento/required-php-extensions/magento-2.3.js +2 -2
  24. package/lib/config/magento/required-php-extensions/magento-2.4.js +2 -2
  25. package/lib/config/magento-config.js +4 -4
  26. package/lib/config/php-config.js +8 -6
  27. package/lib/config/port-config.js +62 -43
  28. package/lib/config/save-config.js +6 -6
  29. package/lib/config/scandipwa-versions.js +2 -2
  30. package/lib/config/services/composer/versions/composer-1.js +2 -2
  31. package/lib/config/services/composer/versions/composer-2.js +2 -2
  32. package/lib/config/services/composer/versions/index.js +1 -1
  33. package/lib/config/services/elasticsearch/base-repo.js +1 -1
  34. package/lib/config/services/elasticsearch/default-es-env.js +4 -1
  35. package/lib/config/services/elasticsearch/versions/elasticsearch-6.8.js +17 -14
  36. package/lib/config/services/elasticsearch/versions/elasticsearch-7.10.js +4 -4
  37. package/lib/config/services/elasticsearch/versions/elasticsearch-7.12.js +4 -4
  38. package/lib/config/services/elasticsearch/versions/elasticsearch-7.16.js +4 -4
  39. package/lib/config/services/elasticsearch/versions/elasticsearch-7.17.js +4 -4
  40. package/lib/config/services/elasticsearch/versions/elasticsearch-7.6.js +4 -4
  41. package/lib/config/services/elasticsearch/versions/elasticsearch-7.7.js +4 -4
  42. package/lib/config/services/elasticsearch/versions/elasticsearch-7.9.js +4 -4
  43. package/lib/config/services/elasticsearch/versions/index.js +9 -9
  44. package/lib/config/services/maildev/index.js +5 -2
  45. package/lib/config/services/mariadb/versions/index.js +1 -1
  46. package/lib/config/services/mariadb/versions/mariadb-10.2.js +5 -4
  47. package/lib/config/services/mariadb/versions/mariadb-10.3.js +5 -4
  48. package/lib/config/services/mariadb/versions/mariadb-10.4.js +5 -4
  49. package/lib/config/services/nginx/versions/index.js +1 -1
  50. package/lib/config/services/nginx/versions/nginx-1.18.js +5 -4
  51. package/lib/config/services/php/base-repo.js +1 -1
  52. package/lib/config/services/php/extensions/apcu.js +3 -3
  53. package/lib/config/services/php/extensions/bcmath.js +2 -2
  54. package/lib/config/services/php/extensions/curl.js +3 -6
  55. package/lib/config/services/php/extensions/gd.js +4 -3
  56. package/lib/config/services/php/extensions/index.js +9 -8
  57. package/lib/config/services/php/extensions/intl.js +3 -5
  58. package/lib/config/services/php/extensions/opcache.js +3 -5
  59. package/lib/config/services/php/extensions/pdo_mysql.js +2 -2
  60. package/lib/config/services/php/extensions/soap.js +3 -5
  61. package/lib/config/services/php/extensions/sodium.js +3 -5
  62. package/lib/config/services/php/extensions/xdebug.js +5 -3
  63. package/lib/config/services/php/extensions/xsl.js +3 -5
  64. package/lib/config/services/php/extensions/zip.js +3 -5
  65. package/lib/config/services/php/versions/index.js +1 -1
  66. package/lib/config/services/php/versions/php-7.2.js +13 -9
  67. package/lib/config/services/php/versions/php-7.3.js +13 -9
  68. package/lib/config/services/php/versions/php-7.4.js +13 -9
  69. package/lib/config/services/php/versions/php-8.1.js +13 -9
  70. package/lib/config/services/redis/index.js +1 -1
  71. package/lib/config/services/redis/redis-5.0.js +2 -2
  72. package/lib/config/services/redis/redis-6.0.js +2 -2
  73. package/lib/config/services/redis/redis-6.2.js +2 -2
  74. package/lib/config/services/ssl-terminator/index.js +6 -5
  75. package/lib/config/services/varnish/index.js +1 -1
  76. package/lib/config/services/varnish/varnish-6-0.js +7 -5
  77. package/lib/config/services/varnish/varnish-6-6.js +7 -5
  78. package/lib/config/services/varnish/varnish-7-0.js +7 -5
  79. package/lib/config/system-config.js +55 -32
  80. package/lib/config/templates/mariadb.template.cnf +8 -0
  81. package/lib/config/versions/index.js +48 -27
  82. package/lib/config/versions/magento-2.2.10.js +22 -15
  83. package/lib/config/versions/magento-2.3.0.js +22 -15
  84. package/lib/config/versions/magento-2.3.1.js +22 -15
  85. package/lib/config/versions/magento-2.3.2-p1.js +22 -15
  86. package/lib/config/versions/magento-2.3.2-p2.js +22 -15
  87. package/lib/config/versions/magento-2.3.2.js +22 -15
  88. package/lib/config/versions/magento-2.3.3-p1.js +22 -15
  89. package/lib/config/versions/magento-2.3.3.js +22 -15
  90. package/lib/config/versions/magento-2.3.4-p1.js +22 -15
  91. package/lib/config/versions/magento-2.3.4-p2.js +22 -15
  92. package/lib/config/versions/magento-2.3.4.js +22 -15
  93. package/lib/config/versions/magento-2.3.5-p1.js +22 -15
  94. package/lib/config/versions/magento-2.3.5-p2.js +22 -15
  95. package/lib/config/versions/magento-2.3.5.js +27 -15
  96. package/lib/config/versions/magento-2.3.6-p1.js +22 -15
  97. package/lib/config/versions/magento-2.3.6.js +22 -15
  98. package/lib/config/versions/magento-2.3.7-p1.js +22 -15
  99. package/lib/config/versions/magento-2.3.7-p2.js +22 -15
  100. package/lib/config/versions/magento-2.3.7-p3.js +22 -15
  101. package/lib/config/versions/magento-2.3.7-p4.js +22 -15
  102. package/lib/config/versions/magento-2.3.7.js +22 -15
  103. package/lib/config/versions/magento-2.4.0-p1.js +22 -15
  104. package/lib/config/versions/magento-2.4.0.js +22 -15
  105. package/lib/config/versions/magento-2.4.1-p1.js +23 -16
  106. package/lib/config/versions/magento-2.4.1.js +23 -16
  107. package/lib/config/versions/magento-2.4.2-p1.js +23 -16
  108. package/lib/config/versions/magento-2.4.2-p2.js +23 -16
  109. package/lib/config/versions/magento-2.4.2.js +23 -16
  110. package/lib/config/versions/magento-2.4.3-p1.js +23 -16
  111. package/lib/config/versions/magento-2.4.3-p2.js +23 -16
  112. package/lib/config/versions/magento-2.4.3-p3.js +23 -16
  113. package/lib/config/versions/magento-2.4.3.js +23 -16
  114. package/lib/config/versions/magento-2.4.4-p1.js +23 -16
  115. package/lib/config/versions/magento-2.4.4-p2.js +23 -16
  116. package/lib/config/versions/magento-2.4.4.js +23 -16
  117. package/lib/config/versions/magento-2.4.5-p1.js +23 -16
  118. package/lib/config/versions/magento-2.4.5.js +23 -17
  119. package/lib/config/xml-parser.js +21 -20
  120. package/lib/errors/known-error.js +8 -6
  121. package/lib/errors/unknown-error.js +8 -6
  122. package/lib/tasks/cache/create-cache-folder.js +10 -10
  123. package/lib/tasks/cache/index.js +1 -1
  124. package/lib/tasks/cache/remove-cache-folder.js +9 -9
  125. package/lib/tasks/cleanup.js +22 -24
  126. package/lib/tasks/cli/create-bashrc-config.js +19 -11
  127. package/lib/tasks/cli/index.js +10 -13
  128. package/lib/tasks/composer/index.js +20 -15
  129. package/lib/tasks/composer/local-auth-json.js +32 -18
  130. package/lib/tasks/database/connect-to-database.js +71 -51
  131. package/lib/tasks/database/create-magento-database.js +7 -7
  132. package/lib/tasks/database/create-magento-user.js +33 -20
  133. package/lib/tasks/database/default-magento-database.js +1 -1
  134. package/lib/tasks/database/default-magento-user.js +2 -2
  135. package/lib/tasks/database/dump-theme-config.js +16 -12
  136. package/lib/tasks/database/fix-db.js +62 -52
  137. package/lib/tasks/database/import-dump-to-database.js +122 -85
  138. package/lib/tasks/database/import-remote-db/index.js +16 -18
  139. package/lib/tasks/database/import-remote-db/ssh/database-dump-command.js +2 -2
  140. package/lib/tasks/database/import-remote-db/ssh/index.js +34 -35
  141. package/lib/tasks/database/import-remote-db/ssh/readymage.js +41 -38
  142. package/lib/tasks/database/import-remote-db/ssh/regular-server.js +44 -46
  143. package/lib/tasks/database/index.js +1 -1
  144. package/lib/tasks/database/magento-tables.js +3 -3
  145. package/lib/tasks/database/restore-theme-config.js +26 -19
  146. package/lib/tasks/docker/api.d.ts +1 -1
  147. package/lib/tasks/docker/api.js +31 -33
  148. package/lib/tasks/docker/containers/container-api.d.ts +49 -14
  149. package/lib/tasks/docker/containers/container-api.js +112 -83
  150. package/lib/tasks/docker/containers/index.js +3 -3
  151. package/lib/tasks/docker/containers/tasks.js +171 -99
  152. package/lib/tasks/docker/convert-composer-home-to-composer-cache-volume.js +34 -25
  153. package/lib/tasks/docker/convert-legacy-volumes.js +91 -55
  154. package/lib/tasks/docker/convert-mysql-to-mariadb.js +178 -147
  155. package/lib/tasks/docker/image/image-api.d.ts +2 -3
  156. package/lib/tasks/docker/image/image-api.js +41 -34
  157. package/lib/tasks/docker/image/index.js +2 -2
  158. package/lib/tasks/docker/index.js +26 -21
  159. package/lib/tasks/docker/network/index.js +3 -3
  160. package/lib/tasks/docker/network/network-api.d.ts +11 -8
  161. package/lib/tasks/docker/network/network-api.js +53 -61
  162. package/lib/tasks/docker/network/tasks.js +41 -31
  163. package/lib/tasks/docker/project-image-builder.js +175 -92
  164. package/lib/tasks/docker/system/index.js +2 -2
  165. package/lib/tasks/docker/system/system-api.d.ts +2 -2
  166. package/lib/tasks/docker/system/system-api.js +16 -19
  167. package/lib/tasks/docker/volume/index.js +3 -3
  168. package/lib/tasks/docker/volume/tasks.js +63 -46
  169. package/lib/tasks/docker/volume/volume-api.d.ts +8 -5
  170. package/lib/tasks/docker/volume/volume-api.js +59 -76
  171. package/lib/tasks/execute.js +91 -55
  172. package/lib/tasks/file-system/create-mariadb-config.js +26 -11
  173. package/lib/tasks/file-system/create-nginx-config.js +18 -19
  174. package/lib/tasks/file-system/create-php-config.js +12 -8
  175. package/lib/tasks/file-system/create-php-debug-config.js +23 -18
  176. package/lib/tasks/file-system/create-php-fpm-config.js +14 -9
  177. package/lib/tasks/file-system/create-phpstorm-config/database-config.js +144 -112
  178. package/lib/tasks/file-system/create-phpstorm-config/eslint-config.js +69 -45
  179. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +69 -70
  180. package/lib/tasks/file-system/create-phpstorm-config/index.js +28 -24
  181. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/coding-standard-config.js +9 -9
  182. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/config.js +23 -23
  183. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/custom-ruleset-path-config.js +22 -19
  184. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/default-properties-config.js +26 -16
  185. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/eslint-inspection-config.js +14 -15
  186. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/index.js +43 -34
  187. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/inspection-tools-config.js +14 -6
  188. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/magento-coding-standard-config.js +9 -9
  189. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/mess-detector-validation-inspection-config.js +53 -47
  190. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/paths.js +41 -12
  191. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-fixer-validation-inspection-config.js +33 -30
  192. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-validation-inspection-config.js +35 -38
  193. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/stylelint-inspection-config.js +14 -15
  194. package/lib/tasks/file-system/create-phpstorm-config/keys.js +10 -10
  195. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +33 -25
  196. package/lib/tasks/file-system/create-phpstorm-config/php-config/mess-detector-config.js +28 -25
  197. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-code-sniffer-config.js +53 -32
  198. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +7 -7
  199. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-cs-fixer-config.js +37 -27
  200. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +53 -31
  201. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-project-shared-configuration-config.js +42 -30
  202. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +33 -20
  203. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +3 -3
  204. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +27 -16
  205. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +14 -13
  206. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +52 -34
  207. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +41 -33
  208. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/format-setting-config.js +39 -27
  209. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +34 -30
  210. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +32 -22
  211. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +32 -22
  212. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +32 -22
  213. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +42 -31
  214. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +45 -33
  215. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +32 -22
  216. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +22 -19
  217. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/properties-component-config.js +35 -21
  218. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +31 -22
  219. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/run-manager-config.js +38 -28
  220. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +5 -5
  221. package/lib/tasks/file-system/create-phpstorm-config/xml-utils.js +3 -2
  222. package/lib/tasks/file-system/create-ssl-terminator-config.js +46 -34
  223. package/lib/tasks/file-system/create-varnish-config.js +20 -23
  224. package/lib/tasks/file-system/create-vscode-config.js +66 -49
  225. package/lib/tasks/file-system/index.js +29 -25
  226. package/lib/tasks/import-dump.js +54 -45
  227. package/lib/tasks/link.js +24 -23
  228. package/lib/tasks/magento/enable-magento-composer-plugins.js +213 -149
  229. package/lib/tasks/magento/index.js +1 -1
  230. package/lib/tasks/magento/install-magento-project.js +158 -97
  231. package/lib/tasks/magento/remove-magento.js +30 -24
  232. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +27 -15
  233. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +23 -10
  234. package/lib/tasks/magento/setup-magento/create-admin.js +21 -13
  235. package/lib/tasks/magento/setup-magento/delete-admin-users.js +5 -5
  236. package/lib/tasks/magento/setup-magento/delete-customers.js +16 -10
  237. package/lib/tasks/magento/setup-magento/delete-orders.js +16 -10
  238. package/lib/tasks/magento/setup-magento/disable-2fa.js +11 -8
  239. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +7 -7
  240. package/lib/tasks/magento/setup-magento/disable-page-builder.js +5 -4
  241. package/lib/tasks/magento/setup-magento/flush-redis-config.js +14 -8
  242. package/lib/tasks/magento/setup-magento/increase-admin-session-lifetime.js +21 -17
  243. package/lib/tasks/magento/setup-magento/index-products.js +4 -6
  244. package/lib/tasks/magento/setup-magento/index.js +54 -47
  245. package/lib/tasks/magento/setup-magento/install-magento.js +112 -79
  246. package/lib/tasks/magento/setup-magento/migrate-database.js +115 -96
  247. package/lib/tasks/magento/setup-magento/set-base-url.js +35 -21
  248. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +15 -13
  249. package/lib/tasks/magento/setup-magento/set-mail-config.js +20 -14
  250. package/lib/tasks/magento/setup-magento/set-url-rewrite.js +13 -9
  251. package/lib/tasks/magento/setup-magento/upgrade-magento.js +30 -22
  252. package/lib/tasks/magento/setup-magento/urn-highlighter.js +11 -11
  253. package/lib/tasks/magento/setup-magento/varnish-config.js +42 -32
  254. package/lib/tasks/magento/setup-magento/waiting-for-redis.js +6 -8
  255. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +108 -65
  256. package/lib/tasks/magento/uninstall-magento.js +19 -16
  257. package/lib/tasks/php/php-container.d.ts +19 -0
  258. package/lib/tasks/php/php-container.js +50 -46
  259. package/lib/tasks/php/update-env-php.js +50 -30
  260. package/lib/tasks/project-config/index.js +12 -8
  261. package/lib/tasks/requirements/composer-credentials.js +215 -112
  262. package/lib/tasks/requirements/docker/context.js +49 -37
  263. package/lib/tasks/requirements/docker/index.js +123 -89
  264. package/lib/tasks/requirements/docker/install-on-mac.js +21 -14
  265. package/lib/tasks/requirements/docker/install.js +63 -52
  266. package/lib/tasks/requirements/docker/performance.js +39 -24
  267. package/lib/tasks/requirements/docker/permissions.js +27 -17
  268. package/lib/tasks/requirements/docker/running-status.js +79 -66
  269. package/lib/tasks/requirements/docker/version.js +15 -11
  270. package/lib/tasks/requirements/index.js +33 -29
  271. package/lib/tasks/requirements/node-version.js +8 -8
  272. package/lib/tasks/requirements/php-version.js +14 -11
  273. package/lib/tasks/requirements/platform.js +42 -26
  274. package/lib/tasks/requirements/rosetta.js +15 -12
  275. package/lib/tasks/start.js +172 -148
  276. package/lib/tasks/status/index.js +155 -88
  277. package/lib/tasks/stop.js +22 -18
  278. package/lib/tasks/theme/build-theme.js +50 -33
  279. package/lib/tasks/theme/install-theme.js +31 -18
  280. package/lib/tasks/theme/link-theme.js +27 -21
  281. package/lib/tasks/theme/retrieve-theme-data.js +24 -18
  282. package/lib/tasks/theme/setup-themes.js +87 -59
  283. package/lib/tasks/theme/symlink-theme.js +44 -22
  284. package/lib/util/CSA-theme.js +23 -21
  285. package/lib/util/analytics.js +130 -75
  286. package/lib/util/arch.js +22 -18
  287. package/lib/util/clean-object.js +15 -10
  288. package/lib/util/config-file-validator.js +74 -55
  289. package/lib/util/config-php-json.js +34 -16
  290. package/lib/util/connection-string.js +41 -27
  291. package/lib/util/console-block.js +112 -65
  292. package/lib/util/database.js +56 -33
  293. package/lib/util/deepmerge.d.ts +1 -1
  294. package/lib/util/deepmerge.js +19 -28
  295. package/lib/util/dockerfile-builder/build-instructions.js +159 -143
  296. package/lib/util/dockerfile-builder/index.js +47 -73
  297. package/lib/util/dockerfile-builder/types.d.ts +2 -1
  298. package/lib/util/download-file.js +28 -16
  299. package/lib/util/env-php-json.js +42 -16
  300. package/lib/util/exec-async-command.d.ts +9 -9
  301. package/lib/util/exec-async-command.js +82 -59
  302. package/lib/util/exec-async.d.ts +2 -0
  303. package/lib/util/exec-async.js +12 -5
  304. package/lib/util/execute-in-container.js +22 -27
  305. package/lib/util/execute-sudo-command.js +11 -15
  306. package/lib/util/get-brew-bin-path.js +27 -23
  307. package/lib/util/get-installed-magento-version.js +22 -16
  308. package/lib/util/get-jsonfile-data.js +14 -9
  309. package/lib/util/install-dependencies-task.js +53 -41
  310. package/lib/util/instance-metadata.js +44 -29
  311. package/lib/util/ip.js +16 -12
  312. package/lib/util/is-running-root.js +6 -3
  313. package/lib/util/is-wsl.js +10 -10
  314. package/lib/util/macos-version.js +12 -11
  315. package/lib/util/magento-task.js +14 -9
  316. package/lib/util/match-filesystem.js +22 -16
  317. package/lib/util/move-file.js +40 -25
  318. package/lib/util/nginx-logs-parser.js +50 -39
  319. package/lib/util/open-browser.js +10 -5
  320. package/lib/util/os-platform.js +40 -32
  321. package/lib/util/path-exists-sync.js +10 -6
  322. package/lib/util/path-exists.js +6 -6
  323. package/lib/util/php-task.js +11 -10
  324. package/lib/util/portscanner.js +97 -85
  325. package/lib/util/prefix.js +31 -22
  326. package/lib/util/resolve-configuration-with-overrides.js +30 -15
  327. package/lib/util/rmdir-safe.js +15 -11
  328. package/lib/util/run-composer.js +16 -16
  329. package/lib/util/run-container-image.js +9 -4
  330. package/lib/util/run-magento.js +16 -17
  331. package/lib/util/run-php.js +16 -21
  332. package/lib/util/safe-regex-extract.js +8 -12
  333. package/lib/util/set-config.js +24 -15
  334. package/lib/util/sleep.js +7 -2
  335. package/lib/util/systemctl.js +62 -44
  336. package/lib/util/wait-for-it.js +42 -33
  337. package/lib/util/wait-for-logs.js +42 -35
  338. package/lib/util/xdg-open-exists.js +19 -19
  339. package/package.json +7 -3
  340. package/tsconfig.json +24 -0
  341. package/typings/context.d.ts +76 -34
  342. package/typings/index.d.ts +54 -20
  343. package/typings/override.d.ts +14 -0
  344. package/typings/phpstorm.d.ts +19 -19
  345. package/.prettierrc +0 -3
  346. package/lib/util/get-php-for-phpbrew.js +0 -30
  347. package/lib/util/request.js +0 -0
@@ -1,27 +1,33 @@
1
- const Joi = require('joi');
2
- const semver = require('semver');
3
- const KnownError = require('../errors/known-error');
4
- const pathExistsSync = require('./path-exists-sync');
1
+ const Joi = require('joi')
2
+ const semver = require('semver')
3
+ const KnownError = require('../errors/known-error')
4
+ const pathExistsSync = require('./path-exists-sync')
5
5
 
6
+ /**
7
+ * @type {Joi.CustomValidator<string>}
8
+ */
6
9
  const fileExistsValidator = (value) => {
7
- const fileExists = pathExistsSync(value);
10
+ const fileExists = pathExistsSync(value)
8
11
 
9
12
  if (!fileExists) {
10
- throw new KnownError(`File "${value}" does not exists!`);
13
+ throw new KnownError(`File "${value}" does not exists!`)
11
14
  }
12
15
 
13
- return undefined;
14
- };
16
+ return undefined
17
+ }
15
18
 
19
+ /**
20
+ * @type {Joi.CustomValidator<string>}
21
+ */
16
22
  const versionValidator = (value, helpers) => {
17
- const isValid = semver.valid(value);
23
+ const isValid = semver.valid(value)
18
24
 
19
25
  if (!isValid) {
20
- return helpers.error('any.invalid');
26
+ return helpers.error('any.invalid')
21
27
  }
22
28
 
23
- return undefined;
24
- };
29
+ return undefined
30
+ }
25
31
 
26
32
  /**
27
33
  * @type {Joi.ObjectSchema<import('../../typings').CMAConfiguration['magento']>}
@@ -33,9 +39,14 @@ const magentoSchema = Joi.object({
33
39
  user: Joi.string().required(),
34
40
  password: Joi.string().required(),
35
41
  adminuri: Joi.string().required(),
36
- mode: Joi.string().valid('default', 'developer', 'production', 'maintenance'),
42
+ mode: Joi.string().valid(
43
+ 'default',
44
+ 'developer',
45
+ 'production',
46
+ 'maintenance'
47
+ ),
37
48
  edition: Joi.string().valid('community', 'enterprise')
38
- });
49
+ })
39
50
 
40
51
  /**
41
52
  * @type {Joi.ObjectSchema<import('../../typings').SSLConfiguration>}
@@ -44,23 +55,21 @@ const sslSchema = Joi.object({
44
55
  enabled: Joi.bool().required(),
45
56
  ssl_certificate: Joi.string().required(),
46
57
  ssl_certificate_key: Joi.string().required()
47
- });
58
+ })
48
59
 
49
60
  /**
50
61
  * @type {Joi.ObjectSchema<import('../../typings/index').PHPExtensions>}
51
62
  */
52
- const phpExtensionConfiguration = Joi.object()
53
- .pattern(
54
- Joi.string(),
55
- Joi.object({
56
- name: Joi.string().optional(),
57
- alternativeName: Joi.array().items(Joi.string()).optional(),
58
- command: Joi.alternatives().try(Joi.func(), Joi.string()).optional(),
59
- dependencies: Joi.array().items(Joi.string()).optional(),
60
- version: Joi.string().optional()
61
- })
62
- .unknown()
63
- );
63
+ const phpExtensionConfiguration = Joi.object().pattern(
64
+ Joi.string(),
65
+ Joi.object({
66
+ name: Joi.string().optional(),
67
+ alternativeName: Joi.array().items(Joi.string()).optional(),
68
+ command: Joi.alternatives().try(Joi.func(), Joi.string()).optional(),
69
+ dependencies: Joi.array().items(Joi.string()).optional(),
70
+ version: Joi.string().optional()
71
+ }).unknown()
72
+ )
64
73
 
65
74
  /**
66
75
  * @type {Joi.ObjectSchema<import('../../typings').PHPConfiguration>}
@@ -72,7 +81,7 @@ const phpConfigurationSchema = Joi.object({
72
81
  configTemplate: Joi.string().optional().custom(fileExistsValidator),
73
82
  debugTemplate: Joi.string().optional().custom(fileExistsValidator),
74
83
  extensions: phpExtensionConfiguration.optional()
75
- });
84
+ })
76
85
 
77
86
  /**
78
87
  * @type {Joi.ObjectSchema<import('../../typings').NginxConfiguration>}
@@ -80,7 +89,7 @@ const phpConfigurationSchema = Joi.object({
80
89
  const nginxConfigurationSchema = Joi.object({
81
90
  image: Joi.string().optional(),
82
91
  configTemplate: Joi.string().optional().custom(fileExistsValidator)
83
- });
92
+ })
84
93
 
85
94
  /**
86
95
  * @type {Joi.ObjectSchema<import('../../typings').VarnishConfiguration>}
@@ -90,14 +99,24 @@ const varnishConfigurationSchema = Joi.object({
90
99
  healthCheck: Joi.boolean().optional(),
91
100
  image: Joi.string().optional(),
92
101
  configTemplate: Joi.string().optional().custom(fileExistsValidator)
93
- });
102
+ })
94
103
 
95
104
  /**
96
105
  * @type {Joi.ObjectSchema<import('../../typings').ServiceWithImage>}
97
106
  */
98
107
  const serviceConfigurationSchema = Joi.object({
99
108
  image: Joi.string().optional()
100
- });
109
+ })
110
+
111
+ /**
112
+ * @type {Joi.ObjectSchema<import('../../typings').MariaDBConfiguration>}
113
+ */
114
+ const mariadbConfigurationSchema = Joi.object({
115
+ image: Joi.string().optional(),
116
+ useOptimizerSwitch: Joi.alternatives()
117
+ .try(Joi.string(), Joi.boolean())
118
+ .optional()
119
+ })
101
120
 
102
121
  /**
103
122
  * @type {Joi.ObjectSchema<import('../../typings').ElasticSearchConfiguration>}
@@ -105,30 +124,30 @@ const serviceConfigurationSchema = Joi.object({
105
124
  const elasticsearchConfigurationSchema = Joi.object({
106
125
  image: Joi.string().optional(),
107
126
  env: Joi.object().optional()
108
- });
127
+ })
109
128
 
110
129
  /**
111
130
  * @type {Joi.ObjectSchema<import('../../typings').ComposerConfiguration>}
112
131
  */
113
132
  const composerConfigurationSchema = Joi.object({
114
- version: Joi.string().optional().custom((value) => {
115
- if (['1', '2'].includes(value)) {
116
- return undefined;
117
- }
118
-
119
- return versionValidator(value);
120
- }),
121
- plugins: Joi.object()
122
- .pattern(
123
- Joi.string(),
124
- Joi.object({
125
- version: Joi.string().optional(),
126
- options: Joi.string().optional(),
127
- enabled: Joi.boolean().optional()
128
- })
129
- .unknown()
130
- )
131
- });
133
+ version: Joi.string()
134
+ .optional()
135
+ .custom((value, helper) => {
136
+ if (['1', '2'].includes(value)) {
137
+ return undefined
138
+ }
139
+
140
+ return versionValidator(value, helper)
141
+ }),
142
+ plugins: Joi.object().pattern(
143
+ Joi.string(),
144
+ Joi.object({
145
+ version: Joi.string().optional(),
146
+ options: Joi.string().optional(),
147
+ enabled: Joi.boolean().optional()
148
+ }).unknown()
149
+ )
150
+ })
132
151
 
133
152
  /**
134
153
  * @type {Joi.ObjectSchema<import('../../typings').CMAConfiguration['configuration']>}
@@ -136,14 +155,14 @@ const composerConfigurationSchema = Joi.object({
136
155
  const configurationSchema = Joi.object({
137
156
  php: phpConfigurationSchema.optional(),
138
157
  nginx: nginxConfigurationSchema.optional(),
139
- mariadb: serviceConfigurationSchema.optional(),
158
+ mariadb: mariadbConfigurationSchema.optional(),
140
159
  elasticsearch: elasticsearchConfigurationSchema.optional(),
141
160
  redis: serviceConfigurationSchema.optional(),
142
161
  composer: composerConfigurationSchema.optional(),
143
162
  varnish: varnishConfigurationSchema.optional(),
144
163
  sslTerminator: nginxConfigurationSchema.optional(),
145
164
  maildev: serviceConfigurationSchema.optional()
146
- });
165
+ })
147
166
 
148
167
  /**
149
168
  * @type {Joi.ObjectSchema<import('../../typings').CMAConfiguration>}
@@ -154,7 +173,7 @@ const configFileSchema = Joi.object({
154
173
  ssl: sslSchema.optional(),
155
174
  prefix: Joi.bool().optional(),
156
175
  configuration: configurationSchema.required()
157
- });
176
+ })
158
177
 
159
178
  /**
160
179
  * @type {Joi.ObjectSchema<{ useNonOverlappingPorts:boolean, analytics:boolean }>}
@@ -162,9 +181,9 @@ const configFileSchema = Joi.object({
162
181
  const systemConfigurationSchema = Joi.object({
163
182
  useNonOverlappingPorts: Joi.bool().optional(),
164
183
  analytics: Joi.bool().optional()
165
- });
184
+ })
166
185
 
167
186
  module.exports = {
168
187
  configFileSchema,
169
188
  systemConfigurationSchema
170
- };
189
+ }
@@ -1,29 +1,47 @@
1
- const path = require('path');
2
- const UnknownError = require('../errors/unknown-error');
3
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
4
- const pathExists = require('./path-exists');
1
+ const path = require('path')
2
+ const UnknownError = require('../errors/unknown-error')
3
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
4
+ const pathExists = require('./path-exists')
5
5
 
6
6
  /**
7
7
  * @param {import('../../typings/context').ListrContext} ctx
8
8
  */
9
9
  const configPhpToJson = async (ctx) => {
10
- const configPhpOnSystemPath = path.join(ctx.config.baseConfig.magentoDir, 'app', 'etc', 'config.php');
11
- const configPhpInContainerPath = path.join(ctx.config.baseConfig.containerMagentoDir, 'app', 'etc', 'config.php');
12
- if (!await pathExists(configPhpOnSystemPath)) {
13
- return null;
10
+ const configPhpOnSystemPath = path.join(
11
+ ctx.config.baseConfig.magentoDir,
12
+ 'app',
13
+ 'etc',
14
+ 'config.php'
15
+ )
16
+ const configPhpInContainerPath = path.join(
17
+ ctx.config.baseConfig.containerMagentoDir,
18
+ 'app',
19
+ 'etc',
20
+ 'config.php'
21
+ )
22
+ if (!(await pathExists(configPhpOnSystemPath))) {
23
+ return null
14
24
  }
15
- const { code, result } = await runPHPContainerCommand(ctx, `php -r "echo json_encode(require '${configPhpInContainerPath}');"`, {
16
- withCode: true
17
- });
25
+ const { code, result } = await runPHPContainerCommand(
26
+ ctx,
27
+ `php -r "echo json_encode(require '${configPhpInContainerPath}');"`,
28
+ {
29
+ withCode: true
30
+ }
31
+ )
18
32
 
19
33
  if (code !== 0) {
20
- throw new UnknownError(`Received non-zero code during converting app/etc/config.php to json:\n\n${result}`);
34
+ throw new UnknownError(
35
+ `Received non-zero code during converting app/etc/config.php to json:\n\n${result}`
36
+ )
21
37
  }
22
38
  try {
23
- return JSON.parse(result);
39
+ return JSON.parse(result)
24
40
  } catch (e) {
25
- throw new UnknownError(`Ooops! Something went wrong when trying to parse app/etc/config.php file!\n\n${e}\n\nFile result: ${result}`);
41
+ throw new UnknownError(
42
+ `Ooops! Something went wrong when trying to parse app/etc/config.php file!\n\n${e}\n\nFile result: ${result}`
43
+ )
26
44
  }
27
- };
45
+ }
28
46
 
29
- module.exports = configPhpToJson;
47
+ module.exports = configPhpToJson
@@ -2,11 +2,12 @@
2
2
  * @typedef ParsedConnection
3
3
  * @prop {String} protocol
4
4
  * @prop {String} [user]
5
+ * @prop {String} [password]
5
6
  * @prop {String} [port]
6
7
  * @prop {String} host
7
8
  * @prop {String} [hostname]
8
9
  * @prop {String[]} [segments]
9
- * @prop {Record<string, string} params
10
+ * @prop {Record<string, string>} params
10
11
  */
11
12
 
12
13
  /**
@@ -14,49 +15,62 @@
14
15
  * @returns {ParsedConnection}
15
16
  */
16
17
  const connectionStringParser = (url) => {
17
- // eslint-disable-next-line no-useless-escape
18
- const pattern = /^(?:([^:\/?#\s]+):\/{2})?(?:([^@\/?#\s]+)@)?([^\/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$/;
19
- const matches = url.match(pattern);
20
- const params = {};
21
- if (matches[5] !== undefined) {
18
+ const pattern =
19
+ /^(?:([^:/?#\s]+):\/{2})?(?:([^@/?#\s]+)@)?([^/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$/
20
+ const matches = url.match(pattern)
21
+
22
+ if (!matches) {
23
+ return {
24
+ host: '',
25
+ params: {},
26
+ protocol: ''
27
+ }
28
+ }
29
+ /**
30
+ * @type {Record<string, string>}
31
+ */
32
+ const params = {}
33
+ if (matches && matches[5] !== undefined) {
22
34
  matches[5].split('&').forEach((x) => {
23
- const a = x.split('=');
24
- params[a[0]] = a[1];
25
- });
35
+ const a = x.split('=')
36
+ params[a[0]] = a[1]
37
+ })
26
38
  }
27
39
 
28
40
  return {
29
41
  protocol: matches[1],
30
42
  user: matches[2] !== undefined ? matches[2].split(':')[0] : undefined,
31
- password: matches[2] !== undefined ? matches[2].split(':')[1] : undefined,
43
+ password:
44
+ matches[2] !== undefined ? matches[2].split(':')[1] : undefined,
32
45
  host: matches[3],
33
- hostname: matches[3] !== undefined ? matches[3].split(/:(?=\d+$)/)[0] : undefined,
34
- port: matches[3] !== undefined ? matches[3].split(/:(?=\d+$)/)[1] : undefined,
46
+ hostname:
47
+ matches[3] !== undefined
48
+ ? matches[3].split(/:(?=\d+$)/)[0]
49
+ : undefined,
50
+ port:
51
+ matches[3] !== undefined
52
+ ? matches[3].split(/:(?=\d+$)/)[1]
53
+ : undefined,
35
54
  segments: matches[4] !== undefined ? matches[4].split('/') : undefined,
36
55
  params
37
- };
38
- };
56
+ }
57
+ }
39
58
 
40
59
  /**
41
60
  * @param {ParsedConnection} options
42
61
  * @returns {String}
43
62
  */
44
63
  const connectionStringBuilder = (options) => {
45
- const {
46
- protocol,
47
- user,
48
- password,
49
- host,
50
- port,
51
- segments,
52
- params
53
- } = options;
64
+ const { protocol, user, password, host, port, segments, params } = options
54
65
 
55
- // eslint-disable-next-line max-len
56
- return `${protocol}://${(user && password) ? `${user}:${password}@` : ''}${host}${port ? `:${port}` : ''}/${(segments && segments.length > 0) ? segments.join('/') : ''}${new URLSearchParams(params).toString()}`;
57
- };
66
+ return `${protocol}://${
67
+ user && password ? `${user}:${password}@` : ''
68
+ }${host}${port ? `:${port}` : ''}/${
69
+ segments && segments.length > 0 ? segments.join('/') : ''
70
+ }${new URLSearchParams(params).toString()}`
71
+ }
58
72
 
59
73
  module.exports = {
60
74
  connectionStringParser,
61
75
  connectionStringBuilder
62
- };
76
+ }
@@ -4,49 +4,48 @@
4
4
  * @typedef {{ type: BlockType, data: string }} Block
5
5
  */
6
6
 
7
- const logger = require('@scandipwa/scandipwa-dev-utils/logger');
8
-
9
- const HORIZONTAL_SEPARATOR = '-';
10
- const VERTICAL_SEPARATOR = '|';
11
- const EMPTY_CHAR = ' ';
12
- const TOP_LEFT_SEPARATOR = '┌';
13
- const TOP_RIGHT_SEPARATOR = '┐';
14
- const MIDDLE_LEFT_SEPARATOR = '├';
15
- const MIDDLE_RIGHT_SEPARATOR = '┤';
16
- const BOTTOM_LEFT_SEPARATOR = '└';
17
- const BOTTOM_RIGHT_SEPARATOR = '┘';
7
+ const logger = require('@scandipwa/scandipwa-dev-utils/logger')
8
+
9
+ const HORIZONTAL_SEPARATOR = '-'
10
+ const VERTICAL_SEPARATOR = '|'
11
+ const EMPTY_CHAR = ' '
12
+ const TOP_LEFT_SEPARATOR = '┌'
13
+ const TOP_RIGHT_SEPARATOR = '┐'
14
+ const MIDDLE_LEFT_SEPARATOR = '├'
15
+ const MIDDLE_RIGHT_SEPARATOR = '┤'
16
+ const BOTTOM_LEFT_SEPARATOR = '└'
17
+ const BOTTOM_RIGHT_SEPARATOR = '┘'
18
18
 
19
19
  // eslint-disable-next-line no-control-regex
20
- const consoleStyleReplacer = /[\u001b]\[\S+?m/g;
20
+ const consoleStyleReplacer = /[\u001b]\[\S+?m/g
21
21
 
22
22
  class ConsoleBlock {
23
23
  constructor() {
24
24
  /**
25
25
  * @type {Block[]}
26
26
  */
27
- this.data = [];
27
+ this.data = []
28
28
  }
29
29
 
30
30
  /**
31
31
  * @param {string} header
32
32
  */
33
33
  addHeader(header) {
34
- this.data.unshift(
35
- {
36
- type: 'header',
37
- data: header
38
- }
39
- );
34
+ this.data.unshift({
35
+ type: 'header',
36
+ data: header
37
+ })
40
38
 
41
- return this;
39
+ return this
42
40
  }
43
41
 
44
42
  addEmptyLine() {
45
43
  this.data.push({
46
- type: 'empty-line'
47
- });
44
+ type: 'empty-line',
45
+ data: ''
46
+ })
48
47
 
49
- return this;
48
+ return this
50
49
  }
51
50
 
52
51
  /**
@@ -56,9 +55,9 @@ class ConsoleBlock {
56
55
  this.data.push({
57
56
  type: 'line',
58
57
  data: line
59
- });
58
+ })
60
59
 
61
- return this;
60
+ return this
62
61
  }
63
62
 
64
63
  /**
@@ -68,58 +67,106 @@ class ConsoleBlock {
68
67
  this.data.push({
69
68
  type: 'separator',
70
69
  data: separator
71
- });
70
+ })
72
71
 
73
- return this;
72
+ return this
74
73
  }
75
74
 
76
75
  log() {
77
76
  const longestLineRaw = this.data.reduce(
78
- (acc, { data = '' }) => (
79
- data.replace(consoleStyleReplacer, '').length > acc ? data.replace(consoleStyleReplacer, '').length : acc
80
- ),
77
+ (acc, { data = '' }) =>
78
+ data.replace(consoleStyleReplacer, '').length > acc
79
+ ? data.replace(consoleStyleReplacer, '').length
80
+ : acc,
81
81
  0
82
- );
83
- const longestLine = longestLineRaw % 2 === 0 ? longestLineRaw + 2 : longestLineRaw + 3;
82
+ )
83
+ const longestLine =
84
+ longestLineRaw % 2 === 0 ? longestLineRaw + 2 : longestLineRaw + 3
84
85
 
85
- logger.log('');
86
+ logger.log('')
86
87
 
87
88
  this.data.forEach(({ type, data }) => {
88
89
  switch (type) {
89
- case 'header': {
90
- const dataLength = data.replace(consoleStyleReplacer, '').length;
91
- const spacersLength = (longestLine - (dataLength % 2 === 0 ? dataLength : (dataLength + 1))) / 2;
92
-
93
- logger.log(`${TOP_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(spacersLength)}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(dataLength % 2 === 0 ? spacersLength : spacersLength + 1)}${TOP_RIGHT_SEPARATOR}`);
94
- break;
95
- }
96
-
97
- case 'line': {
98
- logger.log(`${VERTICAL_SEPARATOR}${EMPTY_CHAR}${data}${EMPTY_CHAR.repeat(longestLine - data.replace(consoleStyleReplacer, '').length || 1)}${EMPTY_CHAR}${VERTICAL_SEPARATOR}`);
99
- break;
100
- }
101
-
102
- case 'separator': {
103
- const dataLength = data.replace(consoleStyleReplacer, '').length;
104
- const spacersLength = (longestLine - (dataLength % 2 === 0 ? dataLength : (dataLength + 1))) / 2;
105
-
106
- logger.log(`${MIDDLE_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(spacersLength)}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(dataLength % 2 === 0 ? spacersLength : spacersLength + 1)}${MIDDLE_RIGHT_SEPARATOR}`);
107
- break;
108
- }
109
-
110
- case 'empty-line': {
111
- logger.log(`${VERTICAL_SEPARATOR}${EMPTY_CHAR.repeat(longestLine + 2)}${VERTICAL_SEPARATOR}`);
112
- break;
113
- }
114
-
115
- default: {
116
- //
117
- }
90
+ case 'header': {
91
+ const dataLength = data.replace(
92
+ consoleStyleReplacer,
93
+ ''
94
+ ).length
95
+ const spacersLength =
96
+ (longestLine -
97
+ (dataLength % 2 === 0
98
+ ? dataLength
99
+ : dataLength + 1)) /
100
+ 2
101
+
102
+ logger.log(
103
+ `${TOP_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
104
+ spacersLength
105
+ )}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(
106
+ dataLength % 2 === 0
107
+ ? spacersLength
108
+ : spacersLength + 1
109
+ )}${TOP_RIGHT_SEPARATOR}`
110
+ )
111
+ break
112
+ }
113
+
114
+ case 'line': {
115
+ logger.log(
116
+ `${VERTICAL_SEPARATOR}${EMPTY_CHAR}${data}${EMPTY_CHAR.repeat(
117
+ longestLine -
118
+ data.replace(consoleStyleReplacer, '').length ||
119
+ 1
120
+ )}${EMPTY_CHAR}${VERTICAL_SEPARATOR}`
121
+ )
122
+ break
123
+ }
124
+
125
+ case 'separator': {
126
+ const dataLength = data.replace(
127
+ consoleStyleReplacer,
128
+ ''
129
+ ).length
130
+ const spacersLength =
131
+ (longestLine -
132
+ (dataLength % 2 === 0
133
+ ? dataLength
134
+ : dataLength + 1)) /
135
+ 2
136
+
137
+ logger.log(
138
+ `${MIDDLE_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
139
+ spacersLength
140
+ )}${EMPTY_CHAR}${data}${EMPTY_CHAR}${HORIZONTAL_SEPARATOR.repeat(
141
+ dataLength % 2 === 0
142
+ ? spacersLength
143
+ : spacersLength + 1
144
+ )}${MIDDLE_RIGHT_SEPARATOR}`
145
+ )
146
+ break
147
+ }
148
+
149
+ case 'empty-line': {
150
+ logger.log(
151
+ `${VERTICAL_SEPARATOR}${EMPTY_CHAR.repeat(
152
+ longestLine + 2
153
+ )}${VERTICAL_SEPARATOR}`
154
+ )
155
+ break
156
+ }
157
+
158
+ default: {
159
+ //
160
+ }
118
161
  }
119
- });
162
+ })
120
163
 
121
- logger.logN(`${BOTTOM_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(longestLine + 2)}${BOTTOM_RIGHT_SEPARATOR}`);
164
+ logger.logN(
165
+ `${BOTTOM_LEFT_SEPARATOR}${HORIZONTAL_SEPARATOR.repeat(
166
+ longestLine + 2
167
+ )}${BOTTOM_RIGHT_SEPARATOR}`
168
+ )
122
169
  }
123
170
  }
124
171
 
125
- module.exports = ConsoleBlock;
172
+ module.exports = ConsoleBlock