@scandipwa/magento-scripts 1.16.0 → 2.0.0-alpha.1

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 (225) hide show
  1. package/lib/commands/cli.js +4 -6
  2. package/lib/commands/execute.js +29 -4
  3. package/lib/commands/import-db.js +1 -1
  4. package/lib/commands/logs.js +1 -1
  5. package/lib/commands/start.js +38 -20
  6. package/lib/commands/status.js +2 -0
  7. package/lib/config/docker.js +98 -83
  8. package/lib/config/get-project-configuration.js +3 -1
  9. package/lib/config/index.js +10 -7
  10. package/lib/config/magento/required-php-extensions/index.js +29 -0
  11. package/lib/config/magento/required-php-extensions/magento-2.3.js +19 -0
  12. package/lib/config/magento/required-php-extensions/magento-2.4.js +29 -0
  13. package/lib/config/php/base-repo.js +3 -0
  14. package/lib/config/php/extensions/apcu.js +12 -0
  15. package/lib/config/php/extensions/bcmath.js +7 -0
  16. package/lib/config/php/extensions/curl.js +11 -0
  17. package/lib/config/php/extensions/gd.js +14 -0
  18. package/lib/config/php/extensions/index.js +18 -2
  19. package/lib/config/php/extensions/intl.js +10 -0
  20. package/lib/config/php/extensions/opcache.js +10 -0
  21. package/lib/config/php/extensions/pdo_mysql.js +7 -0
  22. package/lib/config/php/extensions/soap.js +10 -0
  23. package/lib/config/php/extensions/sodium.js +10 -0
  24. package/lib/config/php/extensions/xdebug.js +8 -5
  25. package/lib/config/php/extensions/xsl.js +10 -0
  26. package/lib/config/php/extensions/zip.js +10 -0
  27. package/lib/config/php/{releases → versions}/index.js +0 -0
  28. package/lib/config/php/versions/php-7.2.js +23 -0
  29. package/lib/config/php/versions/php-7.3.js +23 -0
  30. package/lib/config/php/versions/php-7.4.js +23 -0
  31. package/lib/config/php/versions/php-8.1.js +23 -0
  32. package/lib/config/php-config.js +8 -12
  33. package/lib/config/port-config.js +2 -6
  34. package/lib/config/services/elasticsearch/base-repo.js +3 -0
  35. package/lib/config/services/elasticsearch/versions/elasticsearch-6.8.js +23 -0
  36. package/lib/config/services/elasticsearch/versions/index.js +5 -0
  37. package/lib/config/templates/magentorc.template +5 -5
  38. package/lib/config/templates/mariadb.template.cnf +191 -0
  39. package/lib/config/templates/php-fpm.template.conf +3 -3
  40. package/lib/config/templates/php.template.ini +12 -6
  41. package/lib/config/templates/ssl-terminator.template.conf +1 -1
  42. package/lib/config/templates/vscode-launch.template.json +3 -1
  43. package/lib/config/versions/magento-2.3.0.js +10 -5
  44. package/lib/config/versions/magento-2.3.1.js +10 -5
  45. package/lib/config/versions/magento-2.3.2-p1.js +43 -0
  46. package/lib/config/versions/magento-2.3.2-p2.js +10 -5
  47. package/lib/config/versions/magento-2.3.2.js +10 -5
  48. package/lib/config/versions/magento-2.3.3-p1.js +10 -5
  49. package/lib/config/versions/magento-2.3.3.js +10 -5
  50. package/lib/config/versions/magento-2.3.4-p1.js +43 -0
  51. package/lib/config/versions/magento-2.3.4-p2.js +10 -5
  52. package/lib/config/versions/magento-2.3.4.js +10 -5
  53. package/lib/config/versions/magento-2.3.5-p1.js +8 -2
  54. package/lib/config/versions/magento-2.3.5-p2.js +8 -2
  55. package/lib/config/versions/magento-2.3.5.js +8 -2
  56. package/lib/config/versions/magento-2.3.6-p1.js +8 -2
  57. package/lib/config/versions/magento-2.3.6.js +8 -2
  58. package/lib/config/versions/magento-2.3.7-p1.js +8 -2
  59. package/lib/config/versions/magento-2.3.7-p2.js +8 -2
  60. package/lib/config/versions/magento-2.3.7-p3.js +8 -2
  61. package/lib/config/versions/magento-2.3.7.js +8 -2
  62. package/lib/config/versions/magento-2.4.0-p1.js +9 -3
  63. package/lib/config/versions/magento-2.4.0.js +9 -3
  64. package/lib/config/versions/magento-2.4.1-p1.js +6 -5
  65. package/lib/config/versions/magento-2.4.1.js +9 -2
  66. package/lib/config/versions/magento-2.4.2-p1.js +6 -5
  67. package/lib/config/versions/magento-2.4.2-p2.js +6 -6
  68. package/lib/config/versions/magento-2.4.2.js +6 -6
  69. package/lib/config/versions/magento-2.4.3-p1.js +7 -7
  70. package/lib/config/versions/magento-2.4.3-p2.js +7 -7
  71. package/lib/config/versions/magento-2.4.3.js +7 -7
  72. package/lib/config/versions/magento-2.4.4.js +9 -2
  73. package/lib/tasks/cleanup.js +3 -3
  74. package/lib/tasks/composer/index.js +14 -104
  75. package/lib/tasks/database/connect-to-database.js +117 -0
  76. package/lib/tasks/database/create-magento-database.js +18 -0
  77. package/lib/tasks/{mysql → database}/dump-theme-config.js +3 -3
  78. package/lib/tasks/{mysql → database}/fix-db.js +2 -2
  79. package/lib/tasks/{mysql/import-dump-to-mysql.js → database/import-dump-to-database.js} +65 -22
  80. package/lib/tasks/{mysql → database}/import-remote-db/index.js +0 -0
  81. package/lib/tasks/{mysql/import-remote-db/ssh/mysqldump-command.js → database/import-remote-db/ssh/database-dump-command.js} +2 -2
  82. package/lib/tasks/{mysql → database}/import-remote-db/ssh/index.js +0 -0
  83. package/lib/tasks/{mysql → database}/import-remote-db/ssh/readymage.js +4 -4
  84. package/lib/tasks/{mysql → database}/import-remote-db/ssh/regular-server.js +2 -2
  85. package/lib/tasks/{mysql → database}/index.js +2 -2
  86. package/lib/tasks/{mysql → database}/magento-tables.js +0 -0
  87. package/lib/tasks/{mysql → database}/restore-theme-config.js +4 -4
  88. package/lib/tasks/docker/api.d.ts +71 -0
  89. package/lib/tasks/docker/api.js +30 -0
  90. package/lib/tasks/docker/containers/container-api.d.ts +128 -0
  91. package/lib/tasks/docker/containers/container-api.js +153 -0
  92. package/lib/tasks/docker/containers/index.js +19 -0
  93. package/lib/tasks/docker/containers/tasks.js +215 -0
  94. package/lib/tasks/docker/convert-legacy-volumes.js +15 -10
  95. package/lib/tasks/docker/convert-mysql-to-mariadb.js +284 -0
  96. package/lib/tasks/docker/image/image-api.d.ts +34 -0
  97. package/lib/tasks/docker/image/image-api.js +49 -0
  98. package/lib/tasks/docker/image/index.js +5 -0
  99. package/lib/tasks/docker/index.js +1 -13
  100. package/lib/tasks/docker/network/index.js +7 -0
  101. package/lib/tasks/docker/network/network-api.d.ts +103 -0
  102. package/lib/tasks/docker/network/network-api.js +99 -0
  103. package/lib/tasks/docker/{network.js → network/tasks.js} +17 -10
  104. package/lib/tasks/docker/project-image-builder.js +167 -0
  105. package/lib/tasks/docker/volume/index.js +8 -0
  106. package/lib/tasks/docker/{volumes.js → volume/tasks.js} +5 -19
  107. package/lib/tasks/docker/volume/volume-api.d.ts +39 -0
  108. package/lib/tasks/docker/volume/volume-api.js +66 -0
  109. package/lib/tasks/execute/index.js +5 -2
  110. package/lib/tasks/file-system/create-mariadb-config.js +23 -0
  111. package/lib/tasks/file-system/create-nginx-config.js +2 -3
  112. package/lib/tasks/file-system/create-php-config.js +20 -5
  113. package/lib/tasks/file-system/create-php-fpm-config.js +8 -4
  114. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +41 -29
  115. package/lib/tasks/file-system/create-phpstorm-config/index.js +2 -0
  116. package/lib/tasks/file-system/create-phpstorm-config/keys.js +15 -1
  117. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +4 -1
  118. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-config.js +3 -3
  119. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-interpreters-config.js +81 -0
  120. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/index.js +42 -0
  121. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/php-docker-settings-config.js +9 -0
  122. package/lib/tasks/file-system/create-phpstorm-config/php-docker-settings-config/setup-php-docker-container-settings-config.js +66 -0
  123. package/lib/tasks/file-system/create-phpstorm-config/setup-xml-structure.js +11 -9
  124. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +2 -1
  125. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +15 -30
  126. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +24 -5
  127. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/mess-detector-project-configuration-config.js +50 -0
  128. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-code-sniffer-project-configuration-config.js +50 -0
  129. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-cs-fixer-project-configuration-config.js +50 -0
  130. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +15 -15
  131. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +29 -3
  132. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-stan-project-configuration-config.js.js +50 -0
  133. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-workspace-project-configuration-config.js +42 -0
  134. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/psalm-project-configuration-config.js.js +50 -0
  135. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/workspace-config.js +0 -2
  136. package/lib/tasks/file-system/create-ssl-terminator-config.js +4 -2
  137. package/lib/tasks/file-system/create-vscode-config.js +57 -42
  138. package/lib/tasks/file-system/index.js +5 -2
  139. package/lib/tasks/import-dump.js +6 -6
  140. package/lib/tasks/link.js +5 -4
  141. package/lib/tasks/magento/install-magento-project.js +31 -63
  142. package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +4 -4
  143. package/lib/tasks/magento/setup-magento/configure-elasticsearch.js +7 -3
  144. package/lib/tasks/magento/setup-magento/create-admin.js +5 -6
  145. package/lib/tasks/magento/setup-magento/delete-admin-users.js +2 -2
  146. package/lib/tasks/magento/setup-magento/delete-customers.js +4 -4
  147. package/lib/tasks/magento/setup-magento/delete-orders.js +4 -4
  148. package/lib/tasks/magento/setup-magento/disable-2fa.js +3 -5
  149. package/lib/tasks/magento/setup-magento/disable-maintenance-mode.js +3 -4
  150. package/lib/tasks/magento/setup-magento/increase-admin-session-lifetime.js +2 -2
  151. package/lib/tasks/magento/setup-magento/index.js +3 -3
  152. package/lib/tasks/magento/setup-magento/install-magento.js +47 -40
  153. package/lib/tasks/magento/setup-magento/migrate-database.js +7 -14
  154. package/lib/tasks/magento/setup-magento/set-base-url.js +2 -2
  155. package/lib/tasks/magento/setup-magento/set-deployment-mode.js +4 -4
  156. package/lib/tasks/magento/setup-magento/set-url-rewrite.js +2 -2
  157. package/lib/tasks/magento/setup-magento/varnish-config.js +11 -9
  158. package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +128 -3
  159. package/lib/tasks/php/php-container.js +108 -0
  160. package/lib/tasks/php/update-env-php.js +39 -21
  161. package/lib/tasks/php/update-env.php +66 -61
  162. package/lib/tasks/php/working_health_check.php +85 -0
  163. package/lib/tasks/requirements/{composer.js → composer-credentials.js} +3 -1
  164. package/lib/tasks/requirements/docker/index.js +15 -12
  165. package/lib/tasks/requirements/docker/performance.js +54 -0
  166. package/lib/tasks/requirements/docker/version.js +8 -8
  167. package/lib/tasks/requirements/index.js +5 -8
  168. package/lib/tasks/requirements/php-version.js +8 -116
  169. package/lib/tasks/requirements/platform.js +12 -25
  170. package/lib/tasks/start.js +24 -51
  171. package/lib/tasks/status/index.js +8 -12
  172. package/lib/tasks/stop.js +0 -2
  173. package/lib/tasks/theme/install-theme.js +1 -1
  174. package/lib/tasks/theme/link-theme.js +2 -2
  175. package/lib/tasks/theme/symlink-theme.js +2 -3
  176. package/lib/util/config-file-validator.js +27 -13
  177. package/lib/util/config-php-json.js +13 -4
  178. package/lib/util/database.js +7 -7
  179. package/lib/util/dockerfile-builder/build-instructions.js +197 -0
  180. package/lib/util/dockerfile-builder/index.js +276 -0
  181. package/lib/util/dockerfile-builder/types.d.ts +123 -0
  182. package/lib/util/env-php-json.js +10 -6
  183. package/lib/util/exec-async-command.js +3 -9
  184. package/lib/util/macos-version.js +20 -0
  185. package/lib/util/magento-task.js +3 -4
  186. package/lib/util/nginx-logs-parser.js +122 -0
  187. package/lib/util/php-task.js +3 -6
  188. package/lib/util/run-composer.js +6 -14
  189. package/lib/util/run-container-image.js +17 -0
  190. package/lib/util/run-magento.js +6 -14
  191. package/lib/util/run-php.js +6 -17
  192. package/package.json +9 -9
  193. package/typings/context.d.ts +7 -13
  194. package/typings/index.d.ts +67 -85
  195. package/yarn-error.log +9660 -0
  196. package/lib/config/composer.js +0 -11
  197. package/lib/config/php/extensions/libsodium.js +0 -36
  198. package/lib/config/php/releases/php-7.2.js +0 -25
  199. package/lib/config/php/releases/php-7.3.js +0 -25
  200. package/lib/config/php/releases/php-7.4.js +0 -23
  201. package/lib/config/php/releases/php-8.1.js +0 -25
  202. package/lib/config/phpbrew.js +0 -12
  203. package/lib/tasks/composer/install-prestissimo.js +0 -103
  204. package/lib/tasks/docker/containers.js +0 -231
  205. package/lib/tasks/mysql/connect-to-mysql.js +0 -114
  206. package/lib/tasks/mysql/create-magento-database.js +0 -18
  207. package/lib/tasks/php/bundled-extensions.js +0 -27
  208. package/lib/tasks/php/compile-options.js +0 -56
  209. package/lib/tasks/php/compile.js +0 -55
  210. package/lib/tasks/php/configure.js +0 -89
  211. package/lib/tasks/php/extensions/disable.js +0 -49
  212. package/lib/tasks/php/extensions/enable.js +0 -52
  213. package/lib/tasks/php/extensions/index.js +0 -80
  214. package/lib/tasks/php/extensions/install.js +0 -54
  215. package/lib/tasks/php/index.js +0 -79
  216. package/lib/tasks/php/install-sodium.js +0 -93
  217. package/lib/tasks/php/update-phpbrew.js +0 -45
  218. package/lib/tasks/php/validate-php.js +0 -67
  219. package/lib/tasks/php-fpm/get-process-id.js +0 -14
  220. package/lib/tasks/php-fpm/index.js +0 -4
  221. package/lib/tasks/php-fpm/start-php-fpm.js +0 -49
  222. package/lib/tasks/php-fpm/stop-php-fpm.js +0 -48
  223. package/lib/tasks/requirements/phpbrew/index.js +0 -61
  224. package/lib/tasks/requirements/phpbrew/install.js +0 -159
  225. package/lib/tasks/requirements/phpbrew/version.js +0 -28
@@ -1,50 +1,39 @@
1
1
  const path = require('path');
2
- const { baseConfig } = require('../../../../config');
3
2
  const pathExists = require('../../../../util/path-exists');
4
3
  const { nameKey } = require('../keys');
5
4
  const { formatPathForPHPStormConfig } = require('../xml-utils');
6
5
 
7
6
  const COMPOSER_SETTINGS_COMPONENT_NAME = 'ComposerSettings';
8
7
 
9
- const pharPathKey = '@_pharPath';
8
+ const composerKey = '@_composer';
10
9
  const doNotAskKey = '@_doNotAsk';
11
10
  const synchronizationStateKey = '@_synchronizationState';
12
11
 
13
12
  const composerJsonPath = path.join(process.cwd(), 'composer.json');
14
13
  const composerJsonFormattedPath = formatPathForPHPStormConfig(composerJsonPath);
15
- const composerPharPath = path.join(baseConfig.cacheDir, 'composer', 'composer.phar');
16
- const composerPharFormattedPath = formatPathForPHPStormConfig(composerPharPath);
17
14
 
18
15
  const defaultComposerSettingsProperties = {
19
16
  [doNotAskKey]: 'true',
20
17
  [synchronizationStateKey]: 'SYNCHRONIZE'
21
18
  };
22
19
 
23
- // TODO Ideally, we want to setup interpreter for compose.phar
24
-
25
- // It should look like this:
26
- // <component name="ComposerSettings" synchronizationState="DONT_SYNCHRONIZE">
27
- // <pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath>
28
- // <execution>
29
- // <phar
30
- // pharPath="$PROJECT_DIR$/node_modules/.create-magento-app-cache/composer/composer.phar"
31
- // interpreterId="f19b09e2-16e7-491f-9056-3299df58e578"
32
- // />
33
- // </execution>
34
- // </component>
35
-
36
20
  /**
37
21
  * @param {Array} workspaceConfigs
22
+ * @param {import('../../../../../typings/context').ListrContext} ctx
38
23
  * @returns {Promise<Boolean>}
39
24
  */
40
- const setupComposerSettings = async (workspaceConfigs) => {
25
+ const setupComposerSettings = async (workspaceConfigs, ctx) => {
41
26
  let hasChanges = false;
42
27
  const composerSettingsComponent = workspaceConfigs.find(
43
28
  (workspaceConfig) => workspaceConfig[nameKey] === COMPOSER_SETTINGS_COMPONENT_NAME
44
29
  );
45
30
 
46
31
  const isComposerJsonExists = await pathExists(composerJsonPath);
47
- const isComposerPharExists = await pathExists(composerPharPath);
32
+ const { php } = ctx.config.docker.getContainers(ctx.ports);
33
+ const defaultInterpreterConfig = {
34
+ [nameKey]: ctx.debug ? php.debugImage : php.image,
35
+ [composerKey]: 'composer'
36
+ };
48
37
 
49
38
  if (composerSettingsComponent) {
50
39
  if (
@@ -55,17 +44,15 @@ const setupComposerSettings = async (workspaceConfigs) => {
55
44
  composerSettingsComponent.pharConfigPath = composerJsonFormattedPath;
56
45
  }
57
46
 
58
- const pharConfig = composerSettingsComponent.execution && composerSettingsComponent.execution.phar;
47
+ const interpreterConfig = composerSettingsComponent.execution && composerSettingsComponent.execution.interpreter;
59
48
 
60
- if (pharConfig && isComposerPharExists && !(pharPathKey in pharConfig)) {
61
- hasChanges = true;
62
- pharConfig[pharPathKey] = composerPharFormattedPath;
63
- } else if (!pharConfig && isComposerPharExists) {
49
+ if (!interpreterConfig) {
64
50
  hasChanges = true;
65
51
  composerSettingsComponent.execution = composerSettingsComponent.execution || {};
66
- composerSettingsComponent.execution.phar = {
67
- [pharPathKey]: composerPharFormattedPath
68
- };
52
+ composerSettingsComponent.execution.interpreter = defaultInterpreterConfig;
53
+ } else if (interpreterConfig[nameKey] !== defaultInterpreterConfig[nameKey]) {
54
+ hasChanges = true;
55
+ composerSettingsComponent.execution.interpreter[nameKey] = defaultInterpreterConfig[nameKey];
69
56
  }
70
57
  } else {
71
58
  hasChanges = true;
@@ -74,9 +61,7 @@ const setupComposerSettings = async (workspaceConfigs) => {
74
61
  ...defaultComposerSettingsProperties,
75
62
  pharConfigPath: composerJsonFormattedPath,
76
63
  execution: {
77
- phar: {
78
- [pharPathKey]: composerPharFormattedPath
79
- }
64
+ interpreter: defaultInterpreterConfig
80
65
  }
81
66
  });
82
67
  }
@@ -3,9 +3,15 @@ const pathExists = require('../../../../util/path-exists');
3
3
  const { setupXMLStructure } = require('../setup-xml-structure');
4
4
  const setupComposerSettings = require('./composer-settings-config');
5
5
  const setupFormatOnSave = require('./format-setting-config');
6
+ const setupMessDetectorProjectConfiguration = require('./mess-detector-project-configuration-config');
7
+ const setupPHPCodeSnifferProjectConfiguration = require('./php-code-sniffer-project-configuration-config');
8
+ const setupPHPCSFixerProjectConfiguration = require('./php-cs-fixer-project-configuration-config');
6
9
  const setupPHPDebugGeneral = require('./php-debug-general-config');
7
10
  const setupPHPServers = require('./php-server-config');
11
+ const setupPHPStanProjectConfiguration = require('./php-stan-project-configuration-config.js');
12
+ const setupPHPWorkspaceProjectConfiguration = require('./php-workspace-project-configuration-config');
8
13
  const setupPropertiesComponent = require('./properties-component-config');
14
+ const setupPSalmProjectConfiguration = require('./psalm-project-configuration-config.js');
9
15
  const setupRunManager = require('./run-manager-config');
10
16
  const { getWorkspaceConfig } = require('./workspace-config');
11
17
 
@@ -20,8 +26,15 @@ const setupWorkspaceConfig = () => ({
20
26
  const workspaceConfiguration = setupXMLStructure(await loadXmlFile(workspaceConfig.path));
21
27
  const workspaceConfigs = workspaceConfiguration.project.component;
22
28
  const hasChanges = await Promise.all([
23
- setupPHPDebugGeneral(workspaceConfigs, workspaceConfig),
24
- setupPHPServers(workspaceConfigs, workspaceConfig),
29
+ setupMessDetectorProjectConfiguration(workspaceConfigs),
30
+ setupPHPCSFixerProjectConfiguration(workspaceConfigs),
31
+ setupPHPCodeSnifferProjectConfiguration(workspaceConfigs),
32
+ setupPHPStanProjectConfiguration(workspaceConfigs),
33
+ setupPSalmProjectConfiguration(workspaceConfigs),
34
+ setupPHPWorkspaceProjectConfiguration(workspaceConfigs, ctx),
35
+ setupPHPDebugGeneral(workspaceConfigs),
36
+ setupPHPServers(workspaceConfigs, workspaceConfig, ctx),
37
+ setupComposerSettings(workspaceConfigs, ctx),
25
38
  setupRunManager(workspaceConfigs, workspaceConfig),
26
39
  setupPropertiesComponent(workspaceConfigs)
27
40
  ]);
@@ -39,11 +52,17 @@ const setupWorkspaceConfig = () => ({
39
52
  const workspaceConfigs = workspaceConfiguration.project.component;
40
53
 
41
54
  await Promise.all([
42
- setupPHPDebugGeneral(workspaceConfigs, workspaceConfig),
43
- setupPHPServers(workspaceConfigs, workspaceConfig),
55
+ setupMessDetectorProjectConfiguration(workspaceConfigs),
56
+ setupPHPCSFixerProjectConfiguration(workspaceConfigs),
57
+ setupPHPCodeSnifferProjectConfiguration(workspaceConfigs),
58
+ setupPHPStanProjectConfiguration(workspaceConfigs),
59
+ setupPSalmProjectConfiguration(workspaceConfigs),
60
+ setupPHPDebugGeneral(workspaceConfigs),
61
+ setupPHPServers(workspaceConfigs, workspaceConfig, ctx),
62
+ setupPHPWorkspaceProjectConfiguration(workspaceConfigs, ctx),
44
63
  setupRunManager(workspaceConfigs, workspaceConfig),
45
64
  setupPropertiesComponent(workspaceConfigs),
46
- setupComposerSettings(workspaceConfigs),
65
+ setupComposerSettings(workspaceConfigs, ctx),
47
66
  setupFormatOnSave(workspaceConfigs)
48
67
  ]);
49
68
 
@@ -0,0 +1,50 @@
1
+ const { nameKey, valueKey } = require('../keys');
2
+
3
+ const MESS_DETECTOR_PROJECT_CONFIGURATION_COMPONENT_NAME = 'MessDetectorProjectConfiguration';
4
+
5
+ const selectedConfigurationIdName = 'selectedConfigurationId';
6
+ const value = 'DEFAULT_INTERPRETER';
7
+
8
+ const defaultOption = {
9
+ [nameKey]: selectedConfigurationIdName,
10
+ [valueKey]: value
11
+ };
12
+
13
+ /**
14
+ * @param {Array} workspaceConfigs
15
+ * @returns {Promise<Boolean>}
16
+ */
17
+ const setupMessDetectorProjectConfiguration = async (workspaceConfigs) => {
18
+ let hasChanges = false;
19
+ const messDetectorProjectConfigurationComponent = workspaceConfigs.find(
20
+ (workspaceConfig) => workspaceConfig[nameKey] === MESS_DETECTOR_PROJECT_CONFIGURATION_COMPONENT_NAME
21
+ );
22
+
23
+ if (messDetectorProjectConfigurationComponent) {
24
+ if (messDetectorProjectConfigurationComponent.option && !Array.isArray(messDetectorProjectConfigurationComponent.option)) {
25
+ hasChanges = true;
26
+ messDetectorProjectConfigurationComponent.option = [messDetectorProjectConfigurationComponent.option];
27
+ } else if (!messDetectorProjectConfigurationComponent.option) {
28
+ hasChanges = true;
29
+ messDetectorProjectConfigurationComponent.option = [];
30
+ }
31
+
32
+ if (
33
+ messDetectorProjectConfigurationComponent.option.length > 0
34
+ && !messDetectorProjectConfigurationComponent.option.some((option) => option[nameKey] === selectedConfigurationIdName)
35
+ ) {
36
+ messDetectorProjectConfigurationComponent.option = [defaultOption];
37
+ hasChanges = true;
38
+ }
39
+ } else {
40
+ hasChanges = true;
41
+ workspaceConfigs.push({
42
+ [nameKey]: MESS_DETECTOR_PROJECT_CONFIGURATION_COMPONENT_NAME,
43
+ option: [defaultOption]
44
+ });
45
+ }
46
+
47
+ return hasChanges;
48
+ };
49
+
50
+ module.exports = setupMessDetectorProjectConfiguration;
@@ -0,0 +1,50 @@
1
+ const { nameKey, valueKey } = require('../keys');
2
+
3
+ const PHP_CODE_SNIFFER_PROJECT_CONFIGURATION_COMPONENT_NAME = 'PHPCodeSnifferProjectConfiguration';
4
+
5
+ const selectedConfigurationIdName = 'selectedConfigurationId';
6
+ const value = 'DEFAULT_INTERPRETER';
7
+
8
+ const defaultOption = {
9
+ [nameKey]: selectedConfigurationIdName,
10
+ [valueKey]: value
11
+ };
12
+
13
+ /**
14
+ * @param {Array} workspaceConfigs
15
+ * @returns {Promise<Boolean>}
16
+ */
17
+ const setupPHPCodeSnifferProjectConfiguration = async (workspaceConfigs) => {
18
+ let hasChanges = false;
19
+ const phpCodeSnifferProjectConfigurationComponent = workspaceConfigs.find(
20
+ (workspaceConfig) => workspaceConfig[nameKey] === PHP_CODE_SNIFFER_PROJECT_CONFIGURATION_COMPONENT_NAME
21
+ );
22
+
23
+ if (phpCodeSnifferProjectConfigurationComponent) {
24
+ if (phpCodeSnifferProjectConfigurationComponent.option && !Array.isArray(phpCodeSnifferProjectConfigurationComponent.option)) {
25
+ hasChanges = true;
26
+ phpCodeSnifferProjectConfigurationComponent.option = [phpCodeSnifferProjectConfigurationComponent.option];
27
+ } else if (!phpCodeSnifferProjectConfigurationComponent.option) {
28
+ hasChanges = true;
29
+ phpCodeSnifferProjectConfigurationComponent.option = [];
30
+ }
31
+
32
+ if (
33
+ phpCodeSnifferProjectConfigurationComponent.option.length > 0
34
+ && !phpCodeSnifferProjectConfigurationComponent.option.some((option) => option[nameKey] === selectedConfigurationIdName)
35
+ ) {
36
+ phpCodeSnifferProjectConfigurationComponent.option = [defaultOption];
37
+ hasChanges = true;
38
+ }
39
+ } else {
40
+ hasChanges = true;
41
+ workspaceConfigs.push({
42
+ [nameKey]: PHP_CODE_SNIFFER_PROJECT_CONFIGURATION_COMPONENT_NAME,
43
+ option: [defaultOption]
44
+ });
45
+ }
46
+
47
+ return hasChanges;
48
+ };
49
+
50
+ module.exports = setupPHPCodeSnifferProjectConfiguration;
@@ -0,0 +1,50 @@
1
+ const { nameKey, valueKey } = require('../keys');
2
+
3
+ const PHP_CS_FIXER_PROJECT_CONFIGURATION_COMPONENT_NAME = 'PHPCSFixerProjectConfiguration';
4
+
5
+ const selectedConfigurationIdName = 'selectedConfigurationId';
6
+ const value = 'DEFAULT_INTERPRETER';
7
+
8
+ const defaultOption = {
9
+ [nameKey]: selectedConfigurationIdName,
10
+ [valueKey]: value
11
+ };
12
+
13
+ /**
14
+ * @param {Array} workspaceConfigs
15
+ * @returns {Promise<Boolean>}
16
+ */
17
+ const setupPHPCSFixerProjectConfiguration = async (workspaceConfigs) => {
18
+ let hasChanges = false;
19
+ const phpCSFixeProjectConfigurationComponent = workspaceConfigs.find(
20
+ (workspaceConfig) => workspaceConfig[nameKey] === PHP_CS_FIXER_PROJECT_CONFIGURATION_COMPONENT_NAME
21
+ );
22
+
23
+ if (phpCSFixeProjectConfigurationComponent) {
24
+ if (phpCSFixeProjectConfigurationComponent.option && !Array.isArray(phpCSFixeProjectConfigurationComponent.option)) {
25
+ hasChanges = true;
26
+ phpCSFixeProjectConfigurationComponent.option = [phpCSFixeProjectConfigurationComponent.option];
27
+ } else if (!phpCSFixeProjectConfigurationComponent.option) {
28
+ hasChanges = true;
29
+ phpCSFixeProjectConfigurationComponent.option = [];
30
+ }
31
+
32
+ if (
33
+ phpCSFixeProjectConfigurationComponent.option.length > 0
34
+ && !phpCSFixeProjectConfigurationComponent.option.some((option) => option[nameKey] === selectedConfigurationIdName)
35
+ ) {
36
+ phpCSFixeProjectConfigurationComponent.option = [defaultOption];
37
+ hasChanges = true;
38
+ }
39
+ } else {
40
+ hasChanges = true;
41
+ workspaceConfigs.push({
42
+ [nameKey]: PHP_CS_FIXER_PROJECT_CONFIGURATION_COMPONENT_NAME,
43
+ option: [defaultOption]
44
+ });
45
+ }
46
+
47
+ return hasChanges;
48
+ };
49
+
50
+ module.exports = setupPHPCSFixerProjectConfiguration;
@@ -8,12 +8,13 @@ const portKey = '@_port';
8
8
  const xdebugDebugPortKey = '@_xdebug_debug_port';
9
9
  const ignoreConnectionsThroughUnregisteredServersKey = '@_ignore_connections_through_unregistered_servers';
10
10
 
11
+ const xdebugPort = '9003';
12
+
11
13
  /**
12
14
  * @param {Array} workspaceConfigs
13
- * @param {ReturnType<typeof import('./workspace-config').getWorkspaceConfig>} workspaceConfig
14
15
  * @returns {Promise<Boolean>}
15
16
  */
16
- const setupPHPDebugGeneral = async (workspaceConfigs, workspaceConfig) => {
17
+ const setupPHPDebugGeneral = async (workspaceConfigs) => {
17
18
  let hasChanges = false;
18
19
  const phpDebugGeneralComponent = workspaceConfigs.find(
19
20
  (workspaceConfig) => workspaceConfig[nameKey] === PHP_DEBUG_GENERAL_COMPONENT_NAME
@@ -30,30 +31,29 @@ const setupPHPDebugGeneral = async (workspaceConfigs, workspaceConfig) => {
30
31
 
31
32
  if (!(xdebugDebugPortKey in phpDebugGeneralComponent)) {
32
33
  hasChanges = true;
33
- phpDebugGeneralComponent[xdebugDebugPortKey] = workspaceConfig.v3Port;
34
+ phpDebugGeneralComponent[xdebugDebugPortKey] = xdebugPort;
34
35
  }
35
36
 
36
- const missingXDebugPorts = [workspaceConfig.v3Port, workspaceConfig.v2Port].filter(
37
- (port) => !phpDebugGeneralComponent.xdebug_debug_ports.some((xPort) => xPort[portKey] === port)
38
- );
37
+ if (phpDebugGeneralComponent[xdebugDebugPortKey] !== xdebugPort) {
38
+ hasChanges = true;
39
+ phpDebugGeneralComponent[xdebugDebugPortKey] = xdebugPort;
40
+ }
39
41
 
40
- if (missingXDebugPorts.length > 0) {
42
+ if (!phpDebugGeneralComponent.xdebug_debug_ports.some((xPort) => xPort[portKey] === xdebugPort)) {
41
43
  hasChanges = true;
42
- missingXDebugPorts.forEach((port) => {
43
- phpDebugGeneralComponent.xdebug_debug_ports.push({
44
- [portKey]: port
45
- });
44
+ phpDebugGeneralComponent.xdebug_debug_ports.push({
45
+ [portKey]: xdebugPort
46
46
  });
47
47
  }
48
48
  } else {
49
49
  hasChanges = true;
50
50
  workspaceConfigs.push({
51
51
  [nameKey]: PHP_DEBUG_GENERAL_COMPONENT_NAME,
52
- [xdebugDebugPortKey]: workspaceConfig.v3Port,
52
+ [xdebugDebugPortKey]: xdebugPort,
53
53
  [ignoreConnectionsThroughUnregisteredServersKey]: 'true',
54
- xdebug_debug_ports: [workspaceConfig.v3Port, workspaceConfig.v2Port].map((port) => ({
55
- [portKey]: port
56
- }))
54
+ xdebug_debug_ports: [{
55
+ [portKey]: xdebugPort
56
+ }]
57
57
  });
58
58
  }
59
59
 
@@ -3,13 +3,17 @@ const { nameKey } = require('../keys');
3
3
  const PHP_SERVERS_COMPONENT_NAME = 'PhpServers';
4
4
 
5
5
  const hostKey = '@_host';
6
+ const usePathMappingsKey = '@_use_path_mappings';
7
+ const localRootKey = '@_local-root';
8
+ const remoteRootKey = '@_remote-root';
6
9
 
7
10
  /**
8
11
  * @param {Array} workspaceConfigs
9
12
  * @param {ReturnType<typeof import('./workspace-config').getWorkspaceConfig>} workspaceConfig
13
+ * @param {import('../../../../../typings/context').ListrContext} ctx
10
14
  * @returns {Promise<Boolean>}
11
15
  */
12
- const setupPHPServers = async (workspaceConfigs, workspaceConfig) => {
16
+ const setupPHPServers = async (workspaceConfigs, workspaceConfig, ctx) => {
13
17
  let hasChanges = false;
14
18
  const phpServersComponent = workspaceConfigs.find(
15
19
  (workspaceConfig) => workspaceConfig[nameKey] === PHP_SERVERS_COMPONENT_NAME
@@ -18,7 +22,14 @@ const setupPHPServers = async (workspaceConfigs, workspaceConfig) => {
18
22
  const defaultServerConfig = {
19
23
  [hostKey]: workspaceConfig.debugServerAddress,
20
24
  id: '7e16e907-9ce3-4559-9d26-a30a5650d11f',
21
- [nameKey]: workspaceConfig.serverName
25
+ [nameKey]: workspaceConfig.serverName,
26
+ [usePathMappingsKey]: true,
27
+ path_mappings: {
28
+ mapping: {
29
+ [localRootKey]: '$PROJECT_DIR$',
30
+ [remoteRootKey]: ctx.config.baseConfig.containerMagentoDir
31
+ }
32
+ }
22
33
  };
23
34
 
24
35
  if (phpServersComponent) {
@@ -32,11 +43,26 @@ const setupPHPServers = async (workspaceConfigs, workspaceConfig) => {
32
43
 
33
44
  const serverConfiguration = phpServersComponent.servers.find((server) => server.server[nameKey] === workspaceConfig.serverName);
34
45
 
35
- if (!serverConfiguration) {
46
+ if (!serverConfiguration || !serverConfiguration.server) {
36
47
  hasChanges = true;
37
48
  phpServersComponent.servers.push({
38
49
  server: defaultServerConfig
39
50
  });
51
+ } else if (serverConfiguration.server) {
52
+ if (!serverConfiguration.server[usePathMappingsKey]) {
53
+ hasChanges = true;
54
+ serverConfiguration.server[usePathMappingsKey] = true;
55
+ }
56
+ if (!serverConfiguration.server.path_mappings
57
+ || (
58
+ serverConfiguration.server.path_mappings.mapping
59
+ && serverConfiguration.server.path_mappings.mapping[remoteRootKey] !== defaultServerConfig.path_mappings.mapping[remoteRootKey]
60
+ )
61
+ ) {
62
+ hasChanges = true;
63
+ serverConfiguration.server.path_mappings = serverConfiguration.server.path_mappings || {};
64
+ serverConfiguration.server.path_mappings.mapping = defaultServerConfig.path_mappings.mapping;
65
+ }
40
66
  }
41
67
  } else {
42
68
  hasChanges = true;
@@ -0,0 +1,50 @@
1
+ const { nameKey, valueKey } = require('../keys');
2
+
3
+ const PHP_STAN_PROJECT_CONFIGURATION_COMPONENT_NAME = 'PhpStanProjectConfiguration';
4
+
5
+ const selectedConfigurationIdName = 'selectedConfigurationId';
6
+ const value = 'DEFAULT_INTERPRETER';
7
+
8
+ const defaultOption = {
9
+ [nameKey]: selectedConfigurationIdName,
10
+ [valueKey]: value
11
+ };
12
+
13
+ /**
14
+ * @param {Array} workspaceConfigs
15
+ * @returns {Promise<Boolean>}
16
+ */
17
+ const setupPHPStanProjectConfiguration = async (workspaceConfigs) => {
18
+ let hasChanges = false;
19
+ const phpStanProjectConfigurationComponent = workspaceConfigs.find(
20
+ (workspaceConfig) => workspaceConfig[nameKey] === PHP_STAN_PROJECT_CONFIGURATION_COMPONENT_NAME
21
+ );
22
+
23
+ if (phpStanProjectConfigurationComponent) {
24
+ if (phpStanProjectConfigurationComponent.option && !Array.isArray(phpStanProjectConfigurationComponent.option)) {
25
+ hasChanges = true;
26
+ phpStanProjectConfigurationComponent.option = [phpStanProjectConfigurationComponent.option];
27
+ } else if (!phpStanProjectConfigurationComponent.option) {
28
+ hasChanges = true;
29
+ phpStanProjectConfigurationComponent.option = [];
30
+ }
31
+
32
+ if (
33
+ phpStanProjectConfigurationComponent.option.length > 0
34
+ && !phpStanProjectConfigurationComponent.option.some((option) => option[nameKey] === selectedConfigurationIdName)
35
+ ) {
36
+ phpStanProjectConfigurationComponent.option = [defaultOption];
37
+ hasChanges = true;
38
+ }
39
+ } else {
40
+ hasChanges = true;
41
+ workspaceConfigs.push({
42
+ [nameKey]: PHP_STAN_PROJECT_CONFIGURATION_COMPONENT_NAME,
43
+ option: [defaultOption]
44
+ });
45
+ }
46
+
47
+ return hasChanges;
48
+ };
49
+
50
+ module.exports = setupPHPStanProjectConfiguration;
@@ -0,0 +1,42 @@
1
+ const { nameKey } = require('../keys');
2
+
3
+ const PHP_WORKSPACE_PROJECT_CONFIGURATION_COMPONENT_NAME = 'PhpWorkspaceProjectConfiguration';
4
+
5
+ const interpreterNameKey = '@_interpreter_name';
6
+
7
+ /**
8
+ * @param {Array} workspaceConfigs
9
+ * @param {import('../../../../../typings/context').ListrContext} ctx
10
+ * @returns {Promise<Boolean>}
11
+ */
12
+ const setupPHPWorkspaceProjectConfiguration = async (workspaceConfigs, ctx) => {
13
+ let hasChanges = false;
14
+ const phpWorkspaceProjectConfigurationComponent = workspaceConfigs.find(
15
+ (workspaceConfig) => workspaceConfig[nameKey] === PHP_WORKSPACE_PROJECT_CONFIGURATION_COMPONENT_NAME
16
+ );
17
+ const { php } = ctx.config.docker.getContainers(ctx.ports);
18
+ const currentInterpreterImage = ctx.debug ? php.debugImage : php.image;
19
+
20
+ if (phpWorkspaceProjectConfigurationComponent) {
21
+ if (
22
+ !phpWorkspaceProjectConfigurationComponent[interpreterNameKey]
23
+ || (
24
+ phpWorkspaceProjectConfigurationComponent[interpreterNameKey] !== currentInterpreterImage
25
+ )
26
+ ) {
27
+ hasChanges = true;
28
+ phpWorkspaceProjectConfigurationComponent[interpreterNameKey] = currentInterpreterImage;
29
+ }
30
+ } else {
31
+ hasChanges = true;
32
+ workspaceConfigs.push({
33
+ [nameKey]: PHP_WORKSPACE_PROJECT_CONFIGURATION_COMPONENT_NAME,
34
+ [currentInterpreterImage]: currentInterpreterImage,
35
+ include_path: []
36
+ });
37
+ }
38
+
39
+ return hasChanges;
40
+ };
41
+
42
+ module.exports = setupPHPWorkspaceProjectConfiguration;
@@ -0,0 +1,50 @@
1
+ const { nameKey, valueKey } = require('../keys');
2
+
3
+ const PSALM_PROJECT_CONFIGURATION_COMPONENT_NAME = 'PsalmProjectConfiguration';
4
+
5
+ const selectedConfigurationIdName = 'selectedConfigurationId';
6
+ const value = 'DEFAULT_INTERPRETER';
7
+
8
+ const defaultOption = {
9
+ [nameKey]: selectedConfigurationIdName,
10
+ [valueKey]: value
11
+ };
12
+
13
+ /**
14
+ * @param {Array} workspaceConfigs
15
+ * @returns {Promise<Boolean>}
16
+ */
17
+ const setupPSalmProjectConfiguration = async (workspaceConfigs) => {
18
+ let hasChanges = false;
19
+ const psalmProjectConfigurationComponent = workspaceConfigs.find(
20
+ (workspaceConfig) => workspaceConfig[nameKey] === PSALM_PROJECT_CONFIGURATION_COMPONENT_NAME
21
+ );
22
+
23
+ if (psalmProjectConfigurationComponent) {
24
+ if (psalmProjectConfigurationComponent.option && !Array.isArray(psalmProjectConfigurationComponent.option)) {
25
+ hasChanges = true;
26
+ psalmProjectConfigurationComponent.option = [psalmProjectConfigurationComponent.option];
27
+ } else if (!psalmProjectConfigurationComponent.option) {
28
+ hasChanges = true;
29
+ psalmProjectConfigurationComponent.option = [];
30
+ }
31
+
32
+ if (
33
+ psalmProjectConfigurationComponent.option.length > 0
34
+ && !psalmProjectConfigurationComponent.option.some((option) => option[nameKey] === selectedConfigurationIdName)
35
+ ) {
36
+ psalmProjectConfigurationComponent.option = [defaultOption];
37
+ hasChanges = true;
38
+ }
39
+ } else {
40
+ hasChanges = true;
41
+ workspaceConfigs.push({
42
+ [nameKey]: PSALM_PROJECT_CONFIGURATION_COMPONENT_NAME,
43
+ option: [defaultOption]
44
+ });
45
+ }
46
+
47
+ return hasChanges;
48
+ };
49
+
50
+ module.exports = setupPSalmProjectConfiguration;
@@ -5,8 +5,6 @@ const { baseConfig } = require('../../../../config');
5
5
  * @param {import('../../../../../typings/index').CMAConfiguration} app
6
6
  */
7
7
  const getWorkspaceConfig = (app) => ({
8
- v2Port: '9111',
9
- v3Port: '9003',
10
8
  debugServerAddress: `http://${ app.host }`,
11
9
  serverName: 'create-magento-app',
12
10
  runManagerName: 'create-magento-app',
@@ -19,7 +19,8 @@ const createSSLTerminatorConfig = () => ({
19
19
  overridenConfiguration,
20
20
  baseConfig
21
21
  },
22
- isWsl
22
+ isWsl,
23
+ debug
23
24
  } = ctx;
24
25
 
25
26
  const {
@@ -84,7 +85,8 @@ const createSSLTerminatorConfig = () => ({
84
85
  hostMachine,
85
86
  hostPort,
86
87
  config: overridenConfiguration,
87
- networkToBindTo
88
+ networkToBindTo,
89
+ debug
88
90
  }
89
91
  });
90
92
  } catch (e) {