@scandipwa/magento-scripts 1.13.5-alpha.1 → 1.14.1-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 (63) hide show
  1. package/lib/config/templates/php-fpm.template.conf +1 -0
  2. package/lib/config/versions/magento-2.3.0.js +3 -1
  3. package/lib/config/versions/magento-2.3.1.js +3 -1
  4. package/lib/config/versions/magento-2.3.2-p2.js +3 -1
  5. package/lib/config/versions/magento-2.3.2.js +3 -1
  6. package/lib/config/versions/magento-2.3.3-p1.js +3 -1
  7. package/lib/config/versions/magento-2.3.3.js +3 -1
  8. package/lib/config/versions/magento-2.3.4-p2.js +3 -1
  9. package/lib/config/versions/magento-2.3.4.js +3 -1
  10. package/lib/config/versions/magento-2.3.5-p1.js +3 -1
  11. package/lib/config/versions/magento-2.3.5-p2.js +3 -1
  12. package/lib/config/versions/magento-2.3.5.js +3 -1
  13. package/lib/config/versions/magento-2.3.6-p1.js +3 -1
  14. package/lib/config/versions/magento-2.3.6.js +3 -1
  15. package/lib/config/versions/magento-2.3.7-p2.js +47 -0
  16. package/lib/config/versions/magento-2.3.7-p3.js +47 -0
  17. package/lib/config/versions/magento-2.4.3-p2.js +51 -0
  18. package/lib/config/versions/magento-2.4.4.js +51 -0
  19. package/lib/config/xml-parser.js +61 -0
  20. package/lib/tasks/composer/index.js +1 -1
  21. package/lib/tasks/file-system/create-phpstorm-config/database-config.js +248 -0
  22. package/lib/tasks/file-system/create-phpstorm-config/eslint-config.js +83 -0
  23. package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +154 -0
  24. package/lib/tasks/file-system/create-phpstorm-config/index.js +27 -0
  25. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/coding-standard-config.js +29 -0
  26. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/config.js +54 -0
  27. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/custom-ruleset-path-config.js +31 -0
  28. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/default-properties-config.js +42 -0
  29. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/eslint-inspection-config.js +37 -0
  30. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/index.js +80 -0
  31. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/magento-coding-standard-config.js +29 -0
  32. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/mess-detector-validation-inspection-config.js +145 -0
  33. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/paths.js +20 -0
  34. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-fixer-validation-inspection-config.js +60 -0
  35. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-validation-inspection-config.js +119 -0
  36. package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/stylelint-inspection-config.js +37 -0
  37. package/lib/tasks/file-system/create-phpstorm-config/keys.js +14 -0
  38. package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +67 -0
  39. package/lib/tasks/file-system/create-phpstorm-config/php-config/mess-detector-config.js +57 -0
  40. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-code-sniffer-config.js +76 -0
  41. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-cs-fixer-config.js +63 -0
  42. package/lib/tasks/file-system/create-phpstorm-config/php-config/php-project-shared-configuration-config.js +69 -0
  43. package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +77 -0
  44. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +98 -0
  45. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/format-setting-config.js +57 -0
  46. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +66 -0
  47. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +64 -0
  48. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +60 -0
  49. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/properties-component-config.js +51 -0
  50. package/lib/tasks/file-system/create-phpstorm-config/workspace-config/run-manager-config.js +74 -0
  51. package/lib/tasks/file-system/create-phpstorm-config/xml-utils.js +5 -0
  52. package/lib/tasks/file-system/index.js +1 -1
  53. package/lib/tasks/php/compile-options.js +2 -1
  54. package/lib/tasks/php/compile.js +1 -1
  55. package/lib/tasks/requirements/composer.js +211 -19
  56. package/lib/tasks/requirements/index.js +1 -2
  57. package/lib/tasks/start.js +6 -2
  58. package/lib/util/instance-metadata.js +7 -1
  59. package/package.json +13 -2
  60. package/readme.md +54 -124
  61. package/typings/context.d.ts +2 -0
  62. package/typings/phpstorm.d.ts +33 -0
  63. package/lib/tasks/file-system/create-php-storm-config.js +0 -82
@@ -18,3 +18,4 @@ pm.process_idle_timeout = 10s
18
18
  pm.status_path = /fpmstatus
19
19
  listen = 127.0.0.1:<%= it.ports.fpm %>
20
20
 
21
+ env[PATH] = $PATH
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.2.33',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.2.33',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.2.33',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.2.33',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -8,7 +8,9 @@ module.exports = ({ templateDir } = {}) => ({
8
8
  version: '7.3.28',
9
9
  configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
10
  extensions: {
11
- gd: {},
11
+ gd: {
12
+ macosOptions: '--with-zlib-dir=$(brew --prefix zlib) --with-freetype-dir=$(brew --prefix freetype)'
13
+ },
12
14
  intl: {},
13
15
  zlib: {},
14
16
  openssl: {},
@@ -0,0 +1,47 @@
1
+ const path = require('path');
2
+ const { defaultMagentoConfig } = require('../magento-config');
3
+
4
+ module.exports = ({ templateDir } = {}) => ({
5
+ magentoVersion: '2.3.7-p2',
6
+ configuration: {
7
+ php: {
8
+ version: '7.4.27',
9
+ configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
+ extensions: {
11
+ gd: {},
12
+ intl: {},
13
+ zlib: {},
14
+ openssl: {},
15
+ sockets: {},
16
+ SimpleXML: {},
17
+ xdebug: {
18
+ version: '3.1.2'
19
+ }
20
+ }
21
+ },
22
+ nginx: {
23
+ version: '1.18.0',
24
+ configTemplate: path.join(templateDir || '', 'nginx.template.conf')
25
+ },
26
+ redis: {
27
+ version: '6'
28
+ },
29
+ mysql: {
30
+ version: '5.7'
31
+ },
32
+ mariadb: {
33
+ version: '10.2'
34
+ },
35
+ elasticsearch: {
36
+ version: '7.9.3'
37
+ },
38
+ composer: {
39
+ version: '2'
40
+ }
41
+ },
42
+ magento: defaultMagentoConfig,
43
+ host: 'localhost',
44
+ ssl: {
45
+ enabled: false
46
+ }
47
+ });
@@ -0,0 +1,47 @@
1
+ const path = require('path');
2
+ const { defaultMagentoConfig } = require('../magento-config');
3
+
4
+ module.exports = ({ templateDir } = {}) => ({
5
+ magentoVersion: '2.3.7-p3',
6
+ configuration: {
7
+ php: {
8
+ version: '7.4.27',
9
+ configTemplate: path.join(templateDir || '', 'php.template.ini'),
10
+ extensions: {
11
+ gd: {},
12
+ intl: {},
13
+ zlib: {},
14
+ openssl: {},
15
+ sockets: {},
16
+ SimpleXML: {},
17
+ xdebug: {
18
+ version: '3.1.2'
19
+ }
20
+ }
21
+ },
22
+ nginx: {
23
+ version: '1.18.0',
24
+ configTemplate: path.join(templateDir || '', 'nginx.template.conf')
25
+ },
26
+ redis: {
27
+ version: '6'
28
+ },
29
+ mysql: {
30
+ version: '5.7'
31
+ },
32
+ mariadb: {
33
+ version: '10.2'
34
+ },
35
+ elasticsearch: {
36
+ version: '7.9.3'
37
+ },
38
+ composer: {
39
+ version: '2'
40
+ }
41
+ },
42
+ magento: defaultMagentoConfig,
43
+ host: 'localhost',
44
+ ssl: {
45
+ enabled: false
46
+ }
47
+ });
@@ -0,0 +1,51 @@
1
+ const path = require('path');
2
+ const { defaultMagentoConfig } = require('../magento-config');
3
+ const { libsodium } = require('../php/extensions');
4
+
5
+ module.exports = ({ templateDir } = {}) => ({
6
+ magentoVersion: '2.4.3-p2',
7
+ isDefault: true,
8
+ configuration: {
9
+ php: {
10
+ version: '7.4.27',
11
+ configTemplate: path.join(templateDir || '', 'php.template.ini'),
12
+ extensions: {
13
+ gd: {},
14
+ intl: {},
15
+ zlib: {},
16
+ openssl: {},
17
+ sockets: {},
18
+ SimpleXML: {},
19
+ libsodium,
20
+ fileinfo: {},
21
+ xdebug: {
22
+ version: '3.1.2'
23
+ }
24
+ }
25
+ },
26
+ nginx: {
27
+ version: '1.18.0',
28
+ configTemplate: path.join(templateDir || '', 'nginx.template.conf')
29
+ },
30
+ redis: {
31
+ version: '6.0'
32
+ },
33
+ mysql: {
34
+ version: '8.0'
35
+ },
36
+ mariadb: {
37
+ version: '10.4'
38
+ },
39
+ elasticsearch: {
40
+ version: '7.12.1'
41
+ },
42
+ composer: {
43
+ version: '2'
44
+ }
45
+ },
46
+ magento: defaultMagentoConfig,
47
+ host: 'localhost',
48
+ ssl: {
49
+ enabled: false
50
+ }
51
+ });
@@ -0,0 +1,51 @@
1
+ const path = require('path');
2
+ const { defaultMagentoConfig } = require('../magento-config');
3
+ const { libsodium } = require('../php/extensions');
4
+
5
+ module.exports = ({ templateDir } = {}) => ({
6
+ magentoVersion: '2.4.4',
7
+ isDefault: true,
8
+ configuration: {
9
+ php: {
10
+ version: '8.1.4',
11
+ configTemplate: path.join(templateDir || '', 'php.template.ini'),
12
+ extensions: {
13
+ gd: {},
14
+ intl: {},
15
+ zlib: {},
16
+ openssl: {},
17
+ sockets: {},
18
+ SimpleXML: {},
19
+ libsodium,
20
+ fileinfo: {},
21
+ xdebug: {
22
+ version: '3.1.4'
23
+ }
24
+ }
25
+ },
26
+ nginx: {
27
+ version: '1.18.0',
28
+ configTemplate: path.join(templateDir || '', 'nginx.template.conf')
29
+ },
30
+ redis: {
31
+ version: '6.0'
32
+ },
33
+ mysql: {
34
+ version: '8.0'
35
+ },
36
+ mariadb: {
37
+ version: '10.4'
38
+ },
39
+ elasticsearch: {
40
+ version: '7.16.3'
41
+ },
42
+ composer: {
43
+ version: '2'
44
+ }
45
+ },
46
+ magento: defaultMagentoConfig,
47
+ host: 'localhost',
48
+ ssl: {
49
+ enabled: false
50
+ }
51
+ });
@@ -0,0 +1,61 @@
1
+ const { XMLParser, XMLBuilder } = require('fast-xml-parser');
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const pathExists = require('../util/path-exists');
5
+
6
+ /**
7
+ * @type {import('fast-xml-parser').X2jOptions}
8
+ */
9
+ const xmlParserConfig = {
10
+ ignoreAttributes: false,
11
+ parseAttributeValue: false,
12
+ trimValues: true,
13
+ allowBooleanAttributes: true
14
+ };
15
+
16
+ /**
17
+ * @type {Partial<import('fast-xml-parser').XmlBuilderOptions>}
18
+ */
19
+ const xmlBuilderConfig = {
20
+ ...xmlParserConfig,
21
+ format: true,
22
+ suppressEmptyNode: true,
23
+ suppressBooleanAttributes: false
24
+ };
25
+
26
+ const parser = new XMLParser(xmlParserConfig);
27
+ const builder = new XMLBuilder(xmlBuilderConfig);
28
+
29
+ /**
30
+ * Load xml file to js object
31
+ * @param {String} filePath
32
+ */
33
+ const loadXmlFile = async (filePath) => {
34
+ const fileData = await fs.promises.readFile(filePath, 'utf-8');
35
+
36
+ return parser.parse(fileData);
37
+ };
38
+
39
+ /**
40
+ * Build xml from js object and write it to file
41
+ * @param {String} filePath
42
+ * @param {String} fileData
43
+ */
44
+ const buildXmlFile = async (filePath, fileData) => {
45
+ const xmlFileData = builder.build(fileData);
46
+
47
+ const { dir } = path.parse(filePath);
48
+
49
+ if (!await pathExists(dir)) {
50
+ await fs.promises.mkdir(dir, {
51
+ recursive: true
52
+ });
53
+ }
54
+
55
+ await fs.promises.writeFile(filePath, xmlFileData, 'utf-8');
56
+ };
57
+
58
+ module.exports = {
59
+ loadXmlFile,
60
+ buildXmlFile
61
+ };
@@ -17,7 +17,7 @@ const getComposerVersion = async ({ composer, php }) => {
17
17
 
18
18
  const composerVersion = safeRegexExtract({
19
19
  string: composerVersionOutput,
20
- regex: /(\d+\.\d+\.\d+)/i,
20
+ regex: /composer.+(\d+\.\d+\.\d+)/i,
21
21
  onNoMatch: () => {
22
22
  throw new Error(`
23
23
  No composer version found in composer version output!\n\n${composerVersionOutput}
@@ -0,0 +1,248 @@
1
+ /* eslint-disable no-param-reassign */
2
+ const { loadXmlFile, buildXmlFile } = require('../../../config/xml-parser');
3
+ const pathExists = require('../../../util/path-exists');
4
+ const setConfigFile = require('../../../util/set-config');
5
+
6
+ /**
7
+ * Get link to data-source field, create fields if necessary
8
+ *
9
+ * @param {Object} data
10
+ * @param {Object} defaultData Default data structure that will be used if original data is missing
11
+ */
12
+ const getToDataSource = (data, defaultData) => {
13
+ if (!data.project) {
14
+ data.project = defaultData.project;
15
+ }
16
+
17
+ if (!data.project.component) {
18
+ data.project.component = defaultData.project.component;
19
+ }
20
+
21
+ if (!data.project.component['data-source']) {
22
+ data.project.component['data-source'] = defaultData.project.component['data-source'];
23
+ }
24
+
25
+ return data.project.component['data-source'];
26
+ };
27
+
28
+ /**
29
+ * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
30
+ */
31
+ const setupDataSourceLocalConfig = () => ({
32
+ title: 'Set up datasource local configuration',
33
+ task: async (ctx, task) => {
34
+ const {
35
+ config: {
36
+ phpStorm,
37
+ phpStorm: {
38
+ database
39
+ }
40
+ }
41
+ } = ctx;
42
+
43
+ if (await pathExists(database.dataSourcesLocal.path)) {
44
+ let hasChanges = false;
45
+ const dataSourcesLocalData = await loadXmlFile(database.dataSourcesLocal.path);
46
+ const dataSource = getToDataSource(
47
+ dataSourcesLocalData,
48
+ {
49
+ project: {
50
+ '@_version': '4',
51
+ component: {
52
+ '@_name': 'dataSourceStorageLocal',
53
+ '@_created-in': 'PS-212.5284.49',
54
+ 'data-source': {
55
+ '@_uuid': 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f'
56
+ }
57
+ }
58
+ }
59
+ }
60
+ );
61
+
62
+ if (dataSource['@_name'] !== database.dataSourceManagerName) {
63
+ hasChanges = true;
64
+ dataSource['@_name'] = database.dataSourceManagerName;
65
+ }
66
+
67
+ if (dataSource['@_uuid'] === undefined) {
68
+ hasChanges = true;
69
+ dataSource['@_uuid'] = 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f';
70
+ }
71
+
72
+ const defaultDatabaseInfoConfig = {
73
+ '@_product': '',
74
+ '@_version': '',
75
+ '@_jdbc-version': '',
76
+ '@_driver-name': '',
77
+ '@_driver-version': '',
78
+ '@_dbms': 'MYSQL',
79
+ '@_exact-version': '0'
80
+ };
81
+ const isDatabaseInfoChangeNeeded = dataSource['database-info']
82
+ ? Object.entries(defaultDatabaseInfoConfig)
83
+ .some(([key]) => !(key in dataSource['database-info']))
84
+ : true;
85
+
86
+ if (isDatabaseInfoChangeNeeded) {
87
+ hasChanges = true;
88
+ if (!dataSource['database-info']) {
89
+ dataSource['database-info'] = defaultDatabaseInfoConfig;
90
+ } else {
91
+ Object.entries(defaultDatabaseInfoConfig).forEach(([key, value]) => {
92
+ if (!(key in dataSource['database-info'])) {
93
+ dataSource['database-info'][key] = value;
94
+ }
95
+ // ^^^ only set missing properties, only ones should be in place
96
+ });
97
+ }
98
+ }
99
+
100
+ const dataSourceDefaultData = {
101
+ 'secret-storage': 'master_key',
102
+ 'user-name': 'magento'
103
+ };
104
+
105
+ const isDataSourceDataChangeNeeded = dataSource
106
+ ? Object.entries(dataSourceDefaultData)
107
+ .some(([key, value]) => dataSource[key] !== value)
108
+ : true;
109
+
110
+ if (isDataSourceDataChangeNeeded) {
111
+ hasChanges = true;
112
+ Object.entries(dataSourceDefaultData).forEach(([key, value]) => {
113
+ dataSource[key] = value;
114
+ });
115
+ }
116
+
117
+ if (!('schema-mapping' in dataSource)) {
118
+ hasChanges = true;
119
+ dataSource['schema-mapping'] = '';
120
+ }
121
+
122
+ if (hasChanges) {
123
+ await buildXmlFile(database.dataSourcesLocal.path, dataSourcesLocalData);
124
+ } else {
125
+ task.skip();
126
+ }
127
+ } else {
128
+ try {
129
+ await setConfigFile({
130
+ configPathname: phpStorm.database.dataSourcesLocal.path,
131
+ template: phpStorm.database.dataSourcesLocal.templatePath,
132
+ overwrite: true,
133
+ templateArgs: {
134
+ phpStorm
135
+ }
136
+ });
137
+ } catch (e) {
138
+ throw new Error(`Unexpected error accrued during dataSources.local.xml config creation\n\n${e}`);
139
+ }
140
+ }
141
+ }
142
+ });
143
+
144
+ /**
145
+ * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
146
+ */
147
+ const setupDataSourceConfig = () => ({
148
+ task: async (ctx, task) => {
149
+ const {
150
+ config: {
151
+ phpStorm,
152
+ phpStorm: {
153
+ database
154
+ }
155
+ },
156
+ ports
157
+ } = ctx;
158
+ const jdbcUrl = `jdbc:mysql://localhost:${ports.mysql}/magento`;
159
+
160
+ if (await pathExists(database.dataSources.path)) {
161
+ let hasChanges = false;
162
+ const dataSourcesData = await loadXmlFile(database.dataSources.path);
163
+ const dataSource = getToDataSource(
164
+ dataSourcesData,
165
+ {
166
+ project: {
167
+ '@_version': '4',
168
+ component: {
169
+ '@_name': 'DataSourceManagerImpl',
170
+ '@_format': 'xml',
171
+ '@_multifile-model': true,
172
+ 'data-source': {
173
+ '@_source': 'LOCAL',
174
+ '@_uuid': 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f'
175
+ }
176
+ }
177
+ }
178
+ }
179
+ );
180
+
181
+ if (dataSource['@_uuid'] === undefined) {
182
+ hasChanges = true;
183
+ dataSource['@_uuid'] = 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f';
184
+ }
185
+
186
+ const expectedDataSourceData = {
187
+ '@_name': database.dataSourceManagerName,
188
+ 'driver-ref': 'mysql.8',
189
+ synchronize: true,
190
+ 'jdbc-driver': 'com.mysql.cj.jdbc.Driver',
191
+ 'jdbc-url': jdbcUrl,
192
+ 'working-dir': '$ProjectFileDir$',
193
+ '@_source': 'LOCAL'
194
+ };
195
+
196
+ const isDataSourceNeedChanges = dataSource
197
+ ? Object.entries(expectedDataSourceData)
198
+ .some(([key]) => !(key in dataSource))
199
+ : true;
200
+
201
+ if (isDataSourceNeedChanges) {
202
+ hasChanges = true;
203
+ if (!dataSource) {
204
+ dataSourcesData.project.component['data-source'] = expectedDataSourceData;
205
+ } else {
206
+ Object.entries(expectedDataSourceData).forEach(([key, value]) => {
207
+ if (!(key in dataSource)) {
208
+ dataSource[key] = value;
209
+ }
210
+ });
211
+ }
212
+ }
213
+
214
+ if (hasChanges) {
215
+ await buildXmlFile(database.dataSources.path, dataSourcesData);
216
+ } else {
217
+ task.skip();
218
+ }
219
+ } else {
220
+ try {
221
+ await setConfigFile({
222
+ configPathname: phpStorm.database.dataSources.path,
223
+ template: phpStorm.database.dataSources.templatePath,
224
+ overwrite: true,
225
+ templateArgs: {
226
+ phpStorm,
227
+ jdbcUrl
228
+ }
229
+ });
230
+ } catch (e) {
231
+ throw new Error(`Unexpected error accrued during dataSources.xml config creation\n\n${e}`);
232
+ }
233
+ }
234
+ }
235
+ });
236
+
237
+ /**
238
+ * @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
239
+ */
240
+ const setupDatabaseConfig = () => ({
241
+ title: 'Set up database configuration',
242
+ task: (ctx, task) => task.newListr([
243
+ setupDataSourceLocalConfig(),
244
+ setupDataSourceConfig()
245
+ ])
246
+ });
247
+
248
+ module.exports = setupDatabaseConfig;