@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,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
+ }
@@ -1,16 +1,18 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const { projectsConfig, projectKey } = require('../config/config');
1
+ const path = require('path')
2
+ const fs = require('fs')
3
+ const { projectsConfig, projectKey } = require('../config/config')
4
4
 
5
- const { name: legacyFolderName, base: folderName } = path.parse(process.cwd());
5
+ const { name: legacyFolderName, base: folderName } = path.parse(process.cwd())
6
6
 
7
7
  const getPrefix = (fName = folderName) => {
8
- const projectInGlobalConfig = projectsConfig.get(projectKey);
8
+ const projectInGlobalConfig = projectsConfig.get(projectKey)
9
9
 
10
10
  if (!projectInGlobalConfig || !projectInGlobalConfig.createdAt) {
11
- const projectStat = fs.statSync(process.cwd());
12
- const projectCreatedAt = Math.floor(projectStat.birthtime.getTime() / 1000).toString();
13
- process.isFirstStart = 1;
11
+ const projectStat = fs.statSync(process.cwd())
12
+ const projectCreatedAt = Math.floor(
13
+ projectStat.birthtime.getTime() / 1000
14
+ ).toString()
15
+ process.isFirstStart = 1
14
16
 
15
17
  // if createdAt property does not set in config, means that project is threaded as legacy
16
18
  // so it uses docker volumes and containers names without prefixes, so it doesn't have creation date
@@ -18,38 +20,45 @@ const getPrefix = (fName = folderName) => {
18
20
  projectsConfig.set(projectKey, {
19
21
  prefix: '',
20
22
  createdAt: projectCreatedAt
21
- });
23
+ })
22
24
  }
23
25
 
24
26
  if (projectInGlobalConfig && projectInGlobalConfig.prefix) {
25
- return `${fName}-${projectInGlobalConfig.prefix}`;
27
+ return `${fName}-${projectInGlobalConfig.prefix}`
26
28
  }
27
29
 
28
- return fName;
29
- };
30
+ return fName
31
+ }
30
32
 
31
33
  const getProjectCreatedAt = () => {
32
- const projectInGlobalConfig = projectsConfig.get(projectKey);
34
+ const projectInGlobalConfig = projectsConfig.get(projectKey)
33
35
 
34
36
  if (projectInGlobalConfig && projectInGlobalConfig.createdAt) {
35
- return new Date(parseInt(projectInGlobalConfig.createdAt, 10) * 1000);
37
+ return new Date(parseInt(projectInGlobalConfig.createdAt, 10) * 1000)
36
38
  }
37
39
 
38
- return null;
39
- };
40
+ return null
41
+ }
40
42
 
43
+ /**
44
+ * @param {boolean} usePrefix
45
+ */
41
46
  const setPrefix = (usePrefix) => {
42
- const projectInGlobalConfig = projectsConfig.get(projectKey);
47
+ const projectInGlobalConfig = projectsConfig.get(projectKey)
43
48
  if (projectInGlobalConfig) {
44
49
  if (usePrefix && !projectInGlobalConfig.prefix) {
45
- const createdAt = projectInGlobalConfig.createdAt || Math.floor(fs.statSync(process.cwd()).birthtime.getTime() / 1000).toString();
46
- projectsConfig.set(`${projectKey}.prefix`, createdAt);
50
+ const createdAt =
51
+ projectInGlobalConfig.createdAt ||
52
+ Math.floor(
53
+ fs.statSync(process.cwd()).birthtime.getTime() / 1000
54
+ ).toString()
55
+ projectsConfig.set(`${projectKey}.prefix`, createdAt)
47
56
  }
48
57
  if (!usePrefix && projectInGlobalConfig.prefix) {
49
- projectsConfig.set(`${projectKey}.prefix`, '');
58
+ projectsConfig.set(`${projectKey}.prefix`, '')
50
59
  }
51
60
  }
52
- };
61
+ }
53
62
 
54
63
  module.exports = {
55
64
  setPrefix,
@@ -57,4 +66,4 @@ module.exports = {
57
66
  getProjectCreatedAt,
58
67
  legacyFolderName,
59
68
  folderName
60
- };
69
+ }
@@ -1,32 +1,47 @@
1
- const path = require('path');
2
- const UnknownError = require('../errors/unknown-error');
3
- const { configFileSchema } = require('./config-file-validator');
4
- const { deepmerge } = require('./deepmerge');
5
- const pathExists = require('./path-exists');
1
+ const path = require('path')
2
+ const UnknownError = require('../errors/unknown-error')
3
+ const { configFileSchema } = require('./config-file-validator')
4
+ const { deepmerge } = require('./deepmerge')
5
+ const pathExists = require('./path-exists')
6
6
 
7
- const resolveConfigurationWithOverrides = async (configuration, baseConfig, projectPath = process.cwd()) => {
8
- const configJSFilePath = path.join(projectPath, 'cma.js');
7
+ /**
8
+ * @param {import('../../typings/index').CMAConfiguration} configuration
9
+ * @param {string} [projectPath]
10
+ */
11
+ const resolveConfigurationWithOverrides = async (
12
+ configuration,
13
+ projectPath = process.cwd()
14
+ ) => {
15
+ const configJSFilePath = path.join(projectPath, 'cma.js')
9
16
  if (await pathExists(configJSFilePath)) {
10
- const userConfiguration = require(configJSFilePath);
17
+ /**
18
+ * @type {import('../../typings/index').CMAConfiguration}
19
+ */
20
+ const userConfiguration = require(configJSFilePath)
11
21
 
12
22
  try {
13
- await configFileSchema.validateAsync(userConfiguration);
23
+ await configFileSchema.validateAsync(userConfiguration)
14
24
  } catch (e) {
15
- throw new UnknownError(`Configuration file validation error!\n\n${e.message}`);
25
+ throw new UnknownError(
26
+ `Configuration file validation error!\n\n${e.message}`
27
+ )
16
28
  }
17
29
 
18
- const overridenConfiguration = deepmerge(configuration, userConfiguration);
30
+ const overridenConfiguration = deepmerge(
31
+ configuration,
32
+ userConfiguration
33
+ )
19
34
 
20
35
  return {
21
36
  userConfiguration,
22
37
  overridenConfiguration
23
- };
38
+ }
24
39
  }
25
40
 
26
41
  return {
27
42
  userConfiguration: configuration,
28
43
  overridenConfiguration: configuration
29
- };
30
- };
44
+ }
45
+ }
31
46
 
32
- module.exports = resolveConfigurationWithOverrides;
47
+ module.exports = resolveConfigurationWithOverrides
@@ -1,28 +1,32 @@
1
- const fs = require('fs');
2
- const path = require('path');
1
+ const fs = require('fs')
2
+ const path = require('path')
3
3
 
4
- const pathExists = require('./path-exists');
4
+ const pathExists = require('./path-exists')
5
5
 
6
+ /**
7
+ * @param {string} dirPath
8
+ * @returns {Promise<boolean>}
9
+ */
6
10
  const rmdirSafe = async (dirPath) => {
7
- const dirExists = await pathExists(dirPath);
11
+ const dirExists = await pathExists(dirPath)
8
12
 
9
13
  if (!dirExists) {
10
- return true;
14
+ return true
11
15
  }
12
16
  const files = await fs.promises.readdir(dirPath, {
13
17
  encoding: 'utf-8',
14
18
  withFileTypes: true
15
- });
19
+ })
16
20
 
17
21
  for (const file of files) {
18
- const filePath = path.join(dirPath, file.name);
22
+ const filePath = path.join(dirPath, file.name)
19
23
  await fs.promises.rm(filePath, {
20
24
  recursive: true,
21
25
  force: true
22
- });
26
+ })
23
27
  }
24
28
 
25
- return true;
26
- };
29
+ return true
30
+ }
27
31
 
28
- module.exports = rmdirSafe;
32
+ module.exports = rmdirSafe
@@ -1,28 +1,28 @@
1
- const UnknownError = require('../errors/unknown-error');
2
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
1
+ const UnknownError = require('../errors/unknown-error')
2
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
3
3
  /**
4
4
  * Execute composer command
5
5
  * @param {import('../../typings/context').ListrContext} ctx
6
6
  * @param {String} command composer command
7
- * @param {Object} options
8
- * @param {Boolean} options.throwNonZeroCode Throw if command return non 0 code.
9
- * @param {String} options.magentoVersion Magento version for config
7
+ * @param {Parameters<import('../tasks/php/php-container')['runPHPContainerCommand']>[2] & { throwNonZeroCode?: boolean }} [options]
10
8
  */
11
9
  const runComposerCommand = async (ctx, command, options = {}) => {
12
- const {
13
- throwNonZeroCode = true
14
- } = options;
15
- const { code, result } = await runPHPContainerCommand(ctx, `composer ${command}`, {
16
- ...options,
17
- withCode: true
18
- });
10
+ const { throwNonZeroCode = true } = options
11
+ const { code, result } = await runPHPContainerCommand(
12
+ ctx,
13
+ `composer ${command}`,
14
+ {
15
+ ...options,
16
+ withCode: true
17
+ }
18
+ )
19
19
 
20
20
  if (throwNonZeroCode && code !== 0) {
21
21
  throw new UnknownError(`Code: ${code}
22
- Response: ${result}`);
22
+ Response: ${result}`)
23
23
  }
24
24
 
25
- return { code, result };
26
- };
25
+ return { code, result }
26
+ }
27
27
 
28
- module.exports = runComposerCommand;
28
+ module.exports = runComposerCommand
@@ -1,6 +1,11 @@
1
- const { execAsyncSpawn } = require('./exec-async-command');
1
+ const { execAsyncSpawn } = require('./exec-async-command')
2
2
 
3
- const runContainerImage = async (imageWithTag, command) => execAsyncSpawn(`docker run --rm ${imageWithTag} ${command}`);
3
+ /**
4
+ * @param {string} imageWithTag
5
+ * @param {string} command
6
+ */
7
+ const runContainerImage = async (imageWithTag, command) =>
8
+ execAsyncSpawn(`docker run --rm ${imageWithTag} ${command}`)
4
9
 
5
10
  /**
6
11
  * @param {string} imageWithTag
@@ -9,9 +14,9 @@ const runContainerImage = async (imageWithTag, command) => execAsyncSpawn(`docke
9
14
  */
10
15
  const runContainerImageTask = (imageWithTag, command) => ({
11
16
  task: () => runContainerImage(imageWithTag, command)
12
- });
17
+ })
13
18
 
14
19
  module.exports = {
15
20
  runContainerImage,
16
21
  runContainerImageTask
17
- };
22
+ }
@@ -1,30 +1,29 @@
1
- const UnknownError = require('../errors/unknown-error');
2
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
1
+ const UnknownError = require('../errors/unknown-error')
2
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
3
3
  /**
4
4
  * Execute magento command
5
5
  *
6
6
  * @param {import('../../typings/context').ListrContext} ctx
7
7
  * @param {String} command magento command
8
- * @param {Object} options
9
- * @param {Boolean} options.logOutput Log output to console using logger
10
- * @param {Boolean} options.withCode
11
- * @param {String} options.cwd
12
- * @param {() => {}} options.callback
13
- * @param {Boolean} options.throwNonZeroCode Throw if command return non 0 code.
8
+ * @param {Parameters<typeof import('../tasks/php/php-container')['runPHPContainerCommand']>[2] & { throwNonZeroCode?: boolean }} options
14
9
  */
15
10
  const runMagentoCommand = async (ctx, command, options = {}) => {
16
- const { throwNonZeroCode = true } = options;
17
- const { code, result } = await runPHPContainerCommand(ctx, `bin/magento ${command}`, {
18
- ...options,
19
- withCode: true
20
- });
11
+ const { throwNonZeroCode = true } = options
12
+ const { code, result } = await runPHPContainerCommand(
13
+ ctx,
14
+ `bin/magento ${command}`,
15
+ {
16
+ ...options,
17
+ withCode: true
18
+ }
19
+ )
21
20
 
22
21
  if (throwNonZeroCode && code !== 0) {
23
22
  throw new UnknownError(`Code: ${code}
24
- Response: ${result}`);
23
+ Response: ${result}`)
25
24
  }
26
25
 
27
- return { code, result };
28
- };
26
+ return { code, result }
27
+ }
29
28
 
30
- module.exports = runMagentoCommand;
29
+ module.exports = runMagentoCommand
@@ -1,33 +1,28 @@
1
- const UnknownError = require('../errors/unknown-error');
2
- const { runPHPContainerCommand } = require('../tasks/php/php-container');
1
+ const UnknownError = require('../errors/unknown-error')
2
+ const { runPHPContainerCommand } = require('../tasks/php/php-container')
3
3
  /**
4
4
  * Execute PHP code
5
5
  * @param {import('../../typings/context').ListrContext} ctx
6
6
  * @param {String} command php command
7
- * @param {Object} options
8
- * @param {Boolean} options.logOutput Log output to console using logger
9
- * @param {Boolean} options.withCode
10
- * @param {String} options.cwd
11
- * @param {() => {}} options.callback
12
- * @param {Boolean} options.throwNonZeroCode Throw if command return non 0 code.
13
- * @param {Record<string, string>} options.env Environment variables
14
- * @param {Boolean} options.useRosettaOnMac Use Rosetta 2 on MacOS
7
+ * @param {Parameters<typeof import('../tasks/php/php-container')['runPHPContainerCommand']>[2] & { throwNonZeroCode?: boolean }} [options]
15
8
  */
16
9
  const runPhpCode = async (ctx, command, options = {}) => {
17
- const {
18
- throwNonZeroCode = true
19
- } = options;
20
- const { code, result } = await runPHPContainerCommand(ctx, `php ${command}`, {
21
- ...options,
22
- withCode: true
23
- });
10
+ const { throwNonZeroCode = true } = options
11
+ const { code, result } = await runPHPContainerCommand(
12
+ ctx,
13
+ `php ${command}`,
14
+ {
15
+ ...options,
16
+ withCode: true
17
+ }
18
+ )
24
19
 
25
20
  if (throwNonZeroCode && code !== 0) {
26
21
  throw new UnknownError(`Code: ${code}
27
- Response: ${result}`);
22
+ Response: ${result}`)
28
23
  }
29
24
 
30
- return { code, result };
31
- };
25
+ return { code, result }
26
+ }
32
27
 
33
- module.exports = runPhpCode;
28
+ module.exports = runPhpCode
@@ -3,24 +3,20 @@
3
3
  * @param {object} param0
4
4
  * @param {string} param0.string
5
5
  * @param {RegExp} param0.regex
6
- * @param {(result: RegExpMatchArray) => string} param0.onNoMatch
6
+ * @param {(result: RegExpMatchArray | null) => string} param0.onNoMatch
7
7
  */
8
- const safeRegexExtract = ({
9
- string,
10
- regex,
11
- onNoMatch
12
- }) => {
13
- const result = string.match(regex);
8
+ const safeRegexExtract = ({ string, regex, onNoMatch }) => {
9
+ const result = string.match(regex)
14
10
 
15
11
  if (result && result.length > 1) {
16
- return result[1];
12
+ return result[1]
17
13
  }
18
14
 
19
15
  if (onNoMatch) {
20
- return onNoMatch(result);
16
+ return onNoMatch(result)
21
17
  }
22
18
 
23
- return result;
24
- };
19
+ return result
20
+ }
25
21
 
26
- module.exports = safeRegexExtract;
22
+ module.exports = safeRegexExtract