@scandipwa/magento-scripts 1.14.1-alpha.8 → 1.15.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.
- package/lib/commands/cli.js +9 -4
- package/lib/commands/logs.js +1 -0
- package/lib/commands/start.js +18 -5
- package/lib/config/check-configuration-file.js +16 -1
- package/lib/config/cma-config.js +16 -0
- package/lib/config/dependencies-for-platforms.js +15 -3
- package/lib/config/docker.js +45 -12
- package/lib/config/get-port-config.js +7 -2
- package/lib/config/index.js +2 -1
- package/lib/config/php/extensions/libsodium.js +2 -1
- package/lib/config/port-config.js +2 -1
- package/lib/config/scandipwa-versions.js +2 -1
- package/lib/config/ssl-terminator/index.js +10 -0
- package/lib/config/system-config.js +34 -5
- package/lib/config/templates/magentorc.template +2 -0
- package/lib/config/templates/nginx.template.conf +0 -31
- package/lib/config/templates/ssl-terminator.template.conf +27 -0
- package/lib/config/templates/varnish.template.vcl +9 -4
- package/lib/config/versions/magento-2.3.0.js +3 -1
- package/lib/config/versions/magento-2.3.1.js +3 -1
- package/lib/config/versions/magento-2.3.2-p2.js +3 -1
- package/lib/config/versions/magento-2.3.2.js +3 -1
- package/lib/config/versions/magento-2.3.3-p1.js +3 -1
- package/lib/config/versions/magento-2.3.3.js +3 -1
- package/lib/config/versions/magento-2.3.4-p2.js +3 -1
- package/lib/config/versions/magento-2.3.4.js +3 -1
- package/lib/config/versions/magento-2.3.5-p1.js +3 -1
- package/lib/config/versions/magento-2.3.5-p2.js +3 -1
- package/lib/config/versions/magento-2.3.5.js +3 -1
- package/lib/config/versions/magento-2.3.6-p1.js +3 -1
- package/lib/config/versions/magento-2.3.6.js +3 -1
- package/lib/config/versions/magento-2.3.7-p1.js +3 -1
- package/lib/config/versions/magento-2.3.7-p2.js +3 -1
- package/lib/config/versions/magento-2.3.7-p3.js +3 -1
- package/lib/config/versions/magento-2.3.7.js +3 -1
- package/lib/config/versions/magento-2.4.0-p1.js +3 -1
- package/lib/config/versions/magento-2.4.0.js +3 -1
- package/lib/config/versions/magento-2.4.1-p1.js +3 -1
- package/lib/config/versions/magento-2.4.1.js +3 -1
- package/lib/config/versions/magento-2.4.2-p1.js +3 -1
- package/lib/config/versions/magento-2.4.2-p2.js +3 -1
- package/lib/config/versions/magento-2.4.2.js +3 -1
- package/lib/config/versions/magento-2.4.3-p1.js +3 -1
- package/lib/config/versions/magento-2.4.3-p2.js +3 -1
- package/lib/config/versions/magento-2.4.3.js +3 -1
- package/lib/config/versions/magento-2.4.4.js +3 -1
- package/lib/config/xml-parser.js +63 -0
- package/lib/errors/known-error.js +15 -0
- package/lib/errors/unknown-error.js +15 -0
- package/lib/tasks/cli/create-bashrc-config.js +2 -1
- package/lib/tasks/composer/index.js +5 -3
- package/lib/tasks/composer/local-auth-json.js +8 -4
- package/lib/tasks/docker/network.js +2 -1
- package/lib/tasks/execute/index.js +2 -3
- package/lib/tasks/file-system/create-nginx-config.js +4 -43
- package/lib/tasks/file-system/create-php-config.js +2 -1
- package/lib/tasks/file-system/create-php-fpm-config.js +2 -1
- package/lib/tasks/file-system/create-phpstorm-config/database-config.js +249 -0
- package/lib/tasks/file-system/create-phpstorm-config/eslint-config.js +85 -0
- package/lib/tasks/file-system/create-phpstorm-config/exclude-folder-config.js +154 -0
- package/lib/tasks/file-system/create-phpstorm-config/index.js +27 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/coding-standard-config.js +26 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/config.js +54 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/custom-ruleset-path-config.js +28 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/default-properties-config.js +42 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/eslint-inspection-config.js +37 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/index.js +80 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/magento-coding-standard-config.js +26 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/mess-detector-validation-inspection-config.js +142 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/paths.js +20 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-fixer-validation-inspection-config.js +60 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/php-cs-validation-inspection-config.js +116 -0
- package/lib/tasks/file-system/create-phpstorm-config/inspection-tools-config/stylelint-inspection-config.js +37 -0
- package/lib/tasks/file-system/create-phpstorm-config/keys.js +14 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-config/index.js +67 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-config/mess-detector-config.js +54 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-config/php-code-sniffer-config.js +66 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-config/php-cs-fixer-config.js +58 -0
- package/lib/tasks/file-system/create-phpstorm-config/php-config/php-project-shared-configuration-config.js +59 -0
- package/lib/tasks/file-system/create-phpstorm-config/stylelint-config.js +77 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/composer-settings-config.js +97 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/format-setting-config.js +57 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/index.js +66 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-debug-general-config.js +64 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/php-server-config.js +57 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/properties-component-config.js +49 -0
- package/lib/tasks/file-system/create-phpstorm-config/workspace-config/run-manager-config.js +64 -0
- package/lib/tasks/file-system/create-phpstorm-config/xml-utils.js +5 -0
- package/lib/tasks/file-system/create-ssl-terminator-config.js +96 -0
- package/lib/tasks/file-system/create-varnish-config.js +2 -1
- package/lib/tasks/file-system/create-vscode-config.js +3 -2
- package/lib/tasks/file-system/index.js +3 -1
- package/lib/tasks/magento/enable-magento-composer-plugins.js +3 -2
- package/lib/tasks/magento/install-magento.js +7 -5
- package/lib/tasks/magento/setup-magento/adjust-full-page-cache.js +26 -0
- package/lib/tasks/magento/setup-magento/delete-admin-users.js +1 -1
- package/lib/tasks/magento/setup-magento/delete-customers.js +7 -4
- package/lib/tasks/magento/setup-magento/delete-orders.js +6 -4
- package/lib/tasks/magento/setup-magento/flush-redis-config.js +2 -1
- package/lib/tasks/magento/setup-magento/index.js +3 -1
- package/lib/tasks/magento/setup-magento/install-magento.js +2 -1
- package/lib/tasks/magento/setup-magento/set-base-url.js +7 -2
- package/lib/tasks/magento/setup-magento/upgrade-magento.js +11 -1
- package/lib/tasks/magento/setup-magento/waiting-for-varnish.js +41 -0
- package/lib/tasks/mysql/connect-to-mysql.js +2 -1
- package/lib/tasks/mysql/import-dump-to-mysql.js +13 -2
- package/lib/tasks/mysql/import-remote-db/index.js +2 -1
- package/lib/tasks/mysql/import-remote-db/ssh/index.js +2 -1
- package/lib/tasks/mysql/import-remote-db/ssh/regular-server.js +2 -1
- package/lib/tasks/php/bundled-extensions.js +28 -0
- package/lib/tasks/php/compile-options.js +27 -54
- package/lib/tasks/php/compile.js +6 -4
- package/lib/tasks/php/configure.js +7 -66
- package/lib/tasks/php/extensions/disable.js +2 -1
- package/lib/tasks/php/extensions/enable.js +2 -1
- package/lib/tasks/php/extensions/index.js +74 -0
- package/lib/tasks/php/extensions/install.js +3 -3
- package/lib/tasks/php/index.js +7 -6
- package/lib/tasks/php/install-sodium.js +93 -0
- package/lib/tasks/php/update-phpbrew.js +7 -3
- package/lib/tasks/php/validate-php.js +67 -0
- package/lib/tasks/php-fpm/start-php-fpm.js +4 -2
- package/lib/tasks/requirements/composer.js +59 -5
- package/lib/tasks/requirements/dependency/arch.js +2 -1
- package/lib/tasks/requirements/dependency/centos.js +2 -1
- package/lib/tasks/requirements/dependency/fedora.js +2 -1
- package/lib/tasks/requirements/dependency/mac.js +18 -3
- package/lib/tasks/requirements/docker/index.js +94 -40
- package/lib/tasks/requirements/docker/install-on-mac.js +29 -0
- package/lib/tasks/requirements/docker/install.js +2 -1
- package/lib/tasks/requirements/docker/running-status.js +32 -31
- package/lib/tasks/requirements/docker/version.js +2 -1
- package/lib/tasks/requirements/index.js +3 -0
- package/lib/tasks/requirements/node-version.js +2 -1
- package/lib/tasks/requirements/php-version.js +26 -24
- package/lib/tasks/requirements/phpbrew/index.js +2 -1
- package/lib/tasks/requirements/phpbrew/install.js +14 -2
- package/lib/tasks/requirements/phpbrew/version.js +2 -1
- package/lib/tasks/requirements/platform.js +5 -3
- package/lib/tasks/requirements/rosetta.js +32 -0
- package/lib/tasks/start.js +10 -2
- package/lib/tasks/status/index.js +24 -8
- package/lib/tasks/theme/build-theme.js +2 -1
- package/lib/tasks/theme/install-theme.js +2 -1
- package/lib/tasks/theme/link-theme.js +2 -2
- package/lib/tasks/theme/retrieve-theme-data.js +2 -1
- package/lib/tasks/theme/setup-persisted-query.js +2 -1
- package/lib/tasks/theme/setup-themes.js +10 -3
- package/lib/tasks/theme/symlink-theme.js +8 -1
- package/lib/util/CSA-theme.js +4 -0
- package/lib/util/analytics.js +320 -0
- package/lib/util/arch.js +1 -1
- package/lib/util/config-file-validator.js +4 -2
- package/lib/util/config-php-json.js +3 -2
- package/lib/util/env-php-json.js +3 -2
- package/lib/util/exec-async-command.d.ts +2 -0
- package/lib/util/exec-async-command.js +31 -15
- package/lib/util/exec-async.js +9 -0
- package/lib/util/get-brew-bin-path.js +64 -0
- package/lib/util/get-installed-magento-version.js +3 -2
- package/lib/util/get-jsonfile-data.js +2 -1
- package/lib/util/install-dependencies-task.js +15 -5
- package/lib/util/instance-metadata.js +11 -4
- package/lib/util/ip.js +47 -1
- package/lib/util/magento-task.js +20 -9
- package/lib/util/php-task.js +7 -7
- package/lib/util/request.js +0 -0
- package/lib/util/resolve-configuration-with-overrides.js +2 -1
- package/lib/util/run-composer.js +5 -3
- package/lib/util/run-magento.js +3 -2
- package/lib/util/run-php.js +7 -2
- package/lib/util/wait-for-it.js +3 -2
- package/package.json +5 -3
- package/typings/context.d.ts +4 -0
- package/typings/index.d.ts +13 -1
- package/typings/phpstorm.d.ts +33 -0
- package/lib/tasks/file-system/create-php-storm-config.js +0 -82
- package/lib/tasks/magento/setup-magento/disable-full-page-cache.js +0 -20
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
const os = require('os');
|
|
2
2
|
const path = require('path');
|
|
3
|
-
const fs = require('fs');
|
|
4
3
|
const setConfigFile = require('../../util/set-config');
|
|
5
|
-
const
|
|
6
|
-
const { isIpAddress } = require('../../util/ip');
|
|
4
|
+
const UnknownError = require('../../errors/unknown-error');
|
|
7
5
|
|
|
8
6
|
/**
|
|
9
7
|
* @type {() => import('listr2').ListrTask<import('../../../typings/context').ListrContext>}
|
|
@@ -23,45 +21,9 @@ const createNginxConfig = () => ({
|
|
|
23
21
|
const {
|
|
24
22
|
configuration: {
|
|
25
23
|
nginx
|
|
26
|
-
},
|
|
27
|
-
ssl,
|
|
28
|
-
host
|
|
29
|
-
} = overridenConfiguration;
|
|
30
|
-
|
|
31
|
-
if (ssl.enabled) {
|
|
32
|
-
if (!(await pathExists(ssl.ssl_certificate))) {
|
|
33
|
-
throw new Error('ssl.ssl_certificate file does not exist!');
|
|
34
|
-
}
|
|
35
|
-
if (!(await pathExists(ssl.ssl_certificate_key))) {
|
|
36
|
-
throw new Error('ssl.ssl_certificate_key file does not exist!');
|
|
37
24
|
}
|
|
25
|
+
} = overridenConfiguration;
|
|
38
26
|
|
|
39
|
-
const nginxCacheDir = path.join(baseConfig.cacheDir, 'nginx', 'conf.d');
|
|
40
|
-
if (!await pathExists(nginxCacheDir)) {
|
|
41
|
-
await fs.promises.mkdir(nginxCacheDir, { recursive: true });
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
await fs.promises.copyFile(
|
|
45
|
-
ssl.ssl_certificate,
|
|
46
|
-
path.join(
|
|
47
|
-
baseConfig.cacheDir,
|
|
48
|
-
'nginx',
|
|
49
|
-
'conf.d',
|
|
50
|
-
'ssl_certificate.pem'
|
|
51
|
-
)
|
|
52
|
-
);
|
|
53
|
-
await fs.promises.copyFile(
|
|
54
|
-
ssl.ssl_certificate_key,
|
|
55
|
-
path.join(
|
|
56
|
-
baseConfig.cacheDir,
|
|
57
|
-
'nginx',
|
|
58
|
-
'conf.d',
|
|
59
|
-
'ssl_certificate-key.pem'
|
|
60
|
-
)
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const networkToBindTo = isIpAddress(host) ? host : '127.0.0.1';
|
|
65
27
|
const isLinux = os.platform() === 'linux';
|
|
66
28
|
const isNativeLinux = isLinux && !isWsl;
|
|
67
29
|
const hostMachine = isNativeLinux ? '127.0.0.1' : 'host.docker.internal';
|
|
@@ -82,12 +44,11 @@ const createNginxConfig = () => ({
|
|
|
82
44
|
mageRoot: baseConfig.magentoDir,
|
|
83
45
|
hostMachine,
|
|
84
46
|
hostPort,
|
|
85
|
-
config: overridenConfiguration
|
|
86
|
-
networkToBindTo
|
|
47
|
+
config: overridenConfiguration
|
|
87
48
|
}
|
|
88
49
|
});
|
|
89
50
|
} catch (e) {
|
|
90
|
-
throw new
|
|
51
|
+
throw new UnknownError(`Unexpected error accrued during nginx config creation\n\n${e}`);
|
|
91
52
|
}
|
|
92
53
|
}
|
|
93
54
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const semver = require('semver');
|
|
2
|
+
const UnknownError = require('../../errors/unknown-error');
|
|
2
3
|
const setConfigFile = require('../../util/set-config');
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -21,7 +22,7 @@ const createPhpConfig = () => ({
|
|
|
21
22
|
}
|
|
22
23
|
});
|
|
23
24
|
} catch (e) {
|
|
24
|
-
throw new
|
|
25
|
+
throw new UnknownError(`Unexpected error accrued during php.ini config creation\n\n${e}`);
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
|
+
const UnknownError = require('../../errors/unknown-error');
|
|
2
3
|
const setConfigFile = require('../../util/set-config');
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -17,7 +18,7 @@ const createPhpFpmConfig = () => ({
|
|
|
17
18
|
}
|
|
18
19
|
});
|
|
19
20
|
} catch (e) {
|
|
20
|
-
throw new
|
|
21
|
+
throw new UnknownError(`Unexpected error accrued during php-fpm config creation\n\n${e}`);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
});
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
|
2
|
+
const { loadXmlFile, buildXmlFile } = require('../../../config/xml-parser');
|
|
3
|
+
const UnknownError = require('../../../errors/unknown-error');
|
|
4
|
+
const pathExists = require('../../../util/path-exists');
|
|
5
|
+
const setConfigFile = require('../../../util/set-config');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get link to data-source field, create fields if necessary
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} data
|
|
11
|
+
* @param {Object} defaultData Default data structure that will be used if original data is missing
|
|
12
|
+
*/
|
|
13
|
+
const getToDataSource = (data, defaultData) => {
|
|
14
|
+
if (!data.project) {
|
|
15
|
+
data.project = defaultData.project;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!data.project.component) {
|
|
19
|
+
data.project.component = defaultData.project.component;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (!data.project.component['data-source']) {
|
|
23
|
+
data.project.component['data-source'] = defaultData.project.component['data-source'];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return data.project.component['data-source'];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
31
|
+
*/
|
|
32
|
+
const setupDataSourceLocalConfig = () => ({
|
|
33
|
+
title: 'Set up datasource local configuration',
|
|
34
|
+
task: async (ctx, task) => {
|
|
35
|
+
const {
|
|
36
|
+
config: {
|
|
37
|
+
phpStorm,
|
|
38
|
+
phpStorm: {
|
|
39
|
+
database
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} = ctx;
|
|
43
|
+
|
|
44
|
+
if (await pathExists(database.dataSourcesLocal.path)) {
|
|
45
|
+
let hasChanges = false;
|
|
46
|
+
const dataSourcesLocalData = await loadXmlFile(database.dataSourcesLocal.path);
|
|
47
|
+
const dataSource = getToDataSource(
|
|
48
|
+
dataSourcesLocalData,
|
|
49
|
+
{
|
|
50
|
+
project: {
|
|
51
|
+
'@_version': '4',
|
|
52
|
+
component: {
|
|
53
|
+
'@_name': 'dataSourceStorageLocal',
|
|
54
|
+
'@_created-in': 'PS-212.5284.49',
|
|
55
|
+
'data-source': {
|
|
56
|
+
'@_uuid': 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f'
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
if (!dataSource['@_name']) {
|
|
64
|
+
hasChanges = true;
|
|
65
|
+
dataSource['@_name'] = database.dataSourceManagerName;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (!dataSource['@_uuid']) {
|
|
69
|
+
hasChanges = true;
|
|
70
|
+
dataSource['@_uuid'] = 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const defaultDatabaseInfoConfig = {
|
|
74
|
+
'@_product': '',
|
|
75
|
+
'@_version': '',
|
|
76
|
+
'@_jdbc-version': '',
|
|
77
|
+
'@_driver-name': '',
|
|
78
|
+
'@_driver-version': '',
|
|
79
|
+
'@_dbms': 'MYSQL',
|
|
80
|
+
'@_exact-version': '0'
|
|
81
|
+
};
|
|
82
|
+
const isDatabaseInfoChangeNeeded = dataSource['database-info']
|
|
83
|
+
? Object.entries(defaultDatabaseInfoConfig)
|
|
84
|
+
.some(([key]) => !(key in dataSource['database-info']))
|
|
85
|
+
: true;
|
|
86
|
+
|
|
87
|
+
if (isDatabaseInfoChangeNeeded) {
|
|
88
|
+
hasChanges = true;
|
|
89
|
+
if (!dataSource['database-info']) {
|
|
90
|
+
dataSource['database-info'] = defaultDatabaseInfoConfig;
|
|
91
|
+
} else {
|
|
92
|
+
Object.entries(defaultDatabaseInfoConfig).forEach(([key, value]) => {
|
|
93
|
+
if (!(key in dataSource['database-info'])) {
|
|
94
|
+
dataSource['database-info'][key] = value;
|
|
95
|
+
}
|
|
96
|
+
// ^^^ only set missing properties, only ones should be in place
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const dataSourceDefaultData = {
|
|
102
|
+
'secret-storage': 'master_key',
|
|
103
|
+
'user-name': 'magento'
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const isDataSourceDataChangeNeeded = dataSource
|
|
107
|
+
? Object.entries(dataSourceDefaultData)
|
|
108
|
+
.some(([key, value]) => dataSource[key] !== value)
|
|
109
|
+
: true;
|
|
110
|
+
|
|
111
|
+
if (isDataSourceDataChangeNeeded) {
|
|
112
|
+
hasChanges = true;
|
|
113
|
+
Object.entries(dataSourceDefaultData).forEach(([key, value]) => {
|
|
114
|
+
dataSource[key] = value;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!('schema-mapping' in dataSource)) {
|
|
119
|
+
hasChanges = true;
|
|
120
|
+
dataSource['schema-mapping'] = '';
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (hasChanges) {
|
|
124
|
+
await buildXmlFile(database.dataSourcesLocal.path, dataSourcesLocalData);
|
|
125
|
+
} else {
|
|
126
|
+
task.skip();
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
try {
|
|
130
|
+
await setConfigFile({
|
|
131
|
+
configPathname: phpStorm.database.dataSourcesLocal.path,
|
|
132
|
+
template: phpStorm.database.dataSourcesLocal.templatePath,
|
|
133
|
+
overwrite: true,
|
|
134
|
+
templateArgs: {
|
|
135
|
+
phpStorm
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
} catch (e) {
|
|
139
|
+
throw new UnknownError(`Unexpected error accrued during dataSources.local.xml config creation\n\n${e}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
147
|
+
*/
|
|
148
|
+
const setupDataSourceConfig = () => ({
|
|
149
|
+
task: async (ctx, task) => {
|
|
150
|
+
const {
|
|
151
|
+
config: {
|
|
152
|
+
phpStorm,
|
|
153
|
+
phpStorm: {
|
|
154
|
+
database
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
ports
|
|
158
|
+
} = ctx;
|
|
159
|
+
const jdbcUrl = `jdbc:mysql://localhost:${ports.mysql}/magento`;
|
|
160
|
+
|
|
161
|
+
if (await pathExists(database.dataSources.path)) {
|
|
162
|
+
let hasChanges = false;
|
|
163
|
+
const dataSourcesData = await loadXmlFile(database.dataSources.path);
|
|
164
|
+
const dataSource = getToDataSource(
|
|
165
|
+
dataSourcesData,
|
|
166
|
+
{
|
|
167
|
+
project: {
|
|
168
|
+
'@_version': '4',
|
|
169
|
+
component: {
|
|
170
|
+
'@_name': 'DataSourceManagerImpl',
|
|
171
|
+
'@_format': 'xml',
|
|
172
|
+
'@_multifile-model': true,
|
|
173
|
+
'data-source': {
|
|
174
|
+
'@_source': 'LOCAL',
|
|
175
|
+
'@_uuid': 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f'
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
if (dataSource['@_uuid'] === undefined) {
|
|
183
|
+
hasChanges = true;
|
|
184
|
+
dataSource['@_uuid'] = 'a2eadb3c-6fc9-4d85-b5f4-d8114906ce2f';
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const expectedDataSourceData = {
|
|
188
|
+
'@_name': database.dataSourceManagerName,
|
|
189
|
+
'driver-ref': 'mysql.8',
|
|
190
|
+
synchronize: true,
|
|
191
|
+
'jdbc-driver': 'com.mysql.cj.jdbc.Driver',
|
|
192
|
+
'jdbc-url': jdbcUrl,
|
|
193
|
+
'working-dir': '$ProjectFileDir$',
|
|
194
|
+
'@_source': 'LOCAL'
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const isDataSourceNeedChanges = dataSource
|
|
198
|
+
? Object.entries(expectedDataSourceData)
|
|
199
|
+
.some(([key]) => !(key in dataSource))
|
|
200
|
+
: true;
|
|
201
|
+
|
|
202
|
+
if (isDataSourceNeedChanges) {
|
|
203
|
+
hasChanges = true;
|
|
204
|
+
if (!dataSource) {
|
|
205
|
+
dataSourcesData.project.component['data-source'] = expectedDataSourceData;
|
|
206
|
+
} else {
|
|
207
|
+
Object.entries(expectedDataSourceData).forEach(([key, value]) => {
|
|
208
|
+
if (!(key in dataSource)) {
|
|
209
|
+
dataSource[key] = value;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (hasChanges) {
|
|
216
|
+
await buildXmlFile(database.dataSources.path, dataSourcesData);
|
|
217
|
+
} else {
|
|
218
|
+
task.skip();
|
|
219
|
+
}
|
|
220
|
+
} else {
|
|
221
|
+
try {
|
|
222
|
+
await setConfigFile({
|
|
223
|
+
configPathname: phpStorm.database.dataSources.path,
|
|
224
|
+
template: phpStorm.database.dataSources.templatePath,
|
|
225
|
+
overwrite: true,
|
|
226
|
+
templateArgs: {
|
|
227
|
+
phpStorm,
|
|
228
|
+
jdbcUrl
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
} catch (e) {
|
|
232
|
+
throw new UnknownError(`Unexpected error accrued during dataSources.xml config creation\n\n${e}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
240
|
+
*/
|
|
241
|
+
const setupDatabaseConfig = () => ({
|
|
242
|
+
title: 'Set up database configuration',
|
|
243
|
+
task: (ctx, task) => task.newListr([
|
|
244
|
+
setupDataSourceLocalConfig(),
|
|
245
|
+
setupDataSourceConfig()
|
|
246
|
+
])
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
module.exports = setupDatabaseConfig;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const { loadXmlFile, buildXmlFile } = require('../../../config/xml-parser');
|
|
3
|
+
const pathExists = require('../../../util/path-exists');
|
|
4
|
+
const { valueKey, nameKey } = require('./keys');
|
|
5
|
+
const { getCSAThemes } = require('../../../util/CSA-theme');
|
|
6
|
+
const { formatPathForPHPStormConfig } = require('./xml-utils');
|
|
7
|
+
|
|
8
|
+
const ESLINT_COMPONENT_NAME = 'EslintConfiguration';
|
|
9
|
+
|
|
10
|
+
const pathToESLintConfig = path.join(process.cwd(), '.idea', 'jsLinters', 'eslint.xml');
|
|
11
|
+
|
|
12
|
+
const defaultESLintComponentConfiguration = {
|
|
13
|
+
[nameKey]: ESLINT_COMPONENT_NAME,
|
|
14
|
+
option: {
|
|
15
|
+
[nameKey]: 'fix-on-save',
|
|
16
|
+
[valueKey]: 'true'
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
22
|
+
*/
|
|
23
|
+
const setupESLintConfig = () => ({
|
|
24
|
+
title: 'Set up ESLint configuration',
|
|
25
|
+
task: async (ctx, task) => {
|
|
26
|
+
if (await pathExists(pathToESLintConfig)) {
|
|
27
|
+
let hasChanges = false;
|
|
28
|
+
const esLintConfigurationData = await loadXmlFile(pathToESLintConfig);
|
|
29
|
+
|
|
30
|
+
if (esLintConfigurationData.project.component && !Array.isArray(esLintConfigurationData.project.component)) {
|
|
31
|
+
hasChanges = true;
|
|
32
|
+
esLintConfigurationData.project.component = [esLintConfigurationData.project.component];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const esLintConfigurationComponent = esLintConfigurationData.project.component.find(
|
|
36
|
+
(config) => config[nameKey] === ESLINT_COMPONENT_NAME
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
if (!esLintConfigurationComponent) {
|
|
40
|
+
hasChanges = true;
|
|
41
|
+
esLintConfigurationData.project.component.push(defaultESLintComponentConfiguration);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (hasChanges) {
|
|
45
|
+
await buildXmlFile(pathToESLintConfig, esLintConfigurationData);
|
|
46
|
+
} else {
|
|
47
|
+
task.skip();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const styleLintConfigurationData = {
|
|
54
|
+
'?xml': {
|
|
55
|
+
'@_version': '1.0',
|
|
56
|
+
'@_encoding': 'UTF-8'
|
|
57
|
+
},
|
|
58
|
+
project: {
|
|
59
|
+
'@_version': '4',
|
|
60
|
+
component: defaultESLintComponentConfiguration
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const themes = await getCSAThemes();
|
|
64
|
+
|
|
65
|
+
if (themes.length > 0) {
|
|
66
|
+
const theme = themes[0];
|
|
67
|
+
if (await pathExists(theme.themePath)) {
|
|
68
|
+
styleLintConfigurationData.project.component['work-dir-pattern'] = {
|
|
69
|
+
[valueKey]: formatPathForPHPStormConfig(theme.themePath)
|
|
70
|
+
};
|
|
71
|
+
const packageJsonPath = path.join(process.cwd(), theme.themePath, 'package.json');
|
|
72
|
+
if (await pathExists(packageJsonPath)) {
|
|
73
|
+
styleLintConfigurationData.project.component['custom-configuration-file'] = {
|
|
74
|
+
'@_used': 'true',
|
|
75
|
+
'@_path': formatPathForPHPStormConfig(packageJsonPath)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
await buildXmlFile(pathToESLintConfig, styleLintConfigurationData);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
module.exports = setupESLintConfig;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const { loadXmlFile, buildXmlFile } = require('../../../config/xml-parser');
|
|
3
|
+
const pathExists = require('../../../util/path-exists');
|
|
4
|
+
const { formatPathForPHPStormConfig } = require('./xml-utils');
|
|
5
|
+
|
|
6
|
+
const pathToModulesConfig = path.join(process.cwd(), '.idea', 'modules.xml');
|
|
7
|
+
const excludeFoldersPaths = [
|
|
8
|
+
'bin',
|
|
9
|
+
'dev',
|
|
10
|
+
'pub',
|
|
11
|
+
'setup',
|
|
12
|
+
'var/cache',
|
|
13
|
+
'var/page_cache',
|
|
14
|
+
'var/log'
|
|
15
|
+
].map((p) => `file://$MODULE_DIR$/${p}`);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Will retrieve project config file path from module.xml
|
|
19
|
+
*
|
|
20
|
+
* @returns {Promise<String>}
|
|
21
|
+
*/
|
|
22
|
+
const getProjectConfigFilePath = async () => {
|
|
23
|
+
const modulesConfigData = await loadXmlFile(pathToModulesConfig);
|
|
24
|
+
return modulesConfigData.project.component.modules.module['@_filepath'].replace('$PROJECT_DIR$', process.cwd());
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @returns {Array<{'@_url': string}>}
|
|
29
|
+
*/
|
|
30
|
+
const getExcludedFoldersConfig = (projectConfigData) => {
|
|
31
|
+
if (!projectConfigData.module) {
|
|
32
|
+
projectConfigData.module = {
|
|
33
|
+
'@_type': 'WEB_MODULE',
|
|
34
|
+
'@_version': '4'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!projectConfigData.module.component) {
|
|
39
|
+
projectConfigData.module.component = {
|
|
40
|
+
'@_name': 'NewModuleRootManager',
|
|
41
|
+
orderEntry: [
|
|
42
|
+
{
|
|
43
|
+
'@_type': 'inheritedJdk'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
'@_type': 'sourceFolder',
|
|
47
|
+
'@_forTest': 'false'
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!projectConfigData.module.component.content) {
|
|
54
|
+
projectConfigData.module.component.content = {
|
|
55
|
+
'@_url': 'file://$MODULE_DIR$'
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!projectConfigData.module.component.content.excludeFolder) {
|
|
60
|
+
projectConfigData.module.component.content.excludeFolder = [];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return projectConfigData
|
|
64
|
+
.module.component.content.excludeFolder;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const setupExcludedFolders = (excludedFoldersConfig) => {
|
|
68
|
+
let hasChanges = false;
|
|
69
|
+
// filter excluded folders to get ones that needs to be added to excluded folders list
|
|
70
|
+
const missingExcludedFolders = excludeFoldersPaths
|
|
71
|
+
.filter(
|
|
72
|
+
(excludeFoldersPath) => !excludedFoldersConfig.some(
|
|
73
|
+
(config) => config['@_url'] === excludeFoldersPath
|
|
74
|
+
)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
if (missingExcludedFolders.length > 0) {
|
|
78
|
+
hasChanges = true;
|
|
79
|
+
missingExcludedFolders.forEach((missingExcludedFolder) => {
|
|
80
|
+
excludedFoldersConfig.unshift({
|
|
81
|
+
'@_url': missingExcludedFolder
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return hasChanges;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const createModulesXML = async () => {
|
|
90
|
+
const filePath = path.join(process.cwd(), '.idea', `${path.parse(process.cwd()).base}.iml`);
|
|
91
|
+
const fileFormattedPath = formatPathForPHPStormConfig(filePath);
|
|
92
|
+
const fileFormattedUrl = `file://${fileFormattedPath}`;
|
|
93
|
+
|
|
94
|
+
const modulesConfig = {
|
|
95
|
+
'?xml': {
|
|
96
|
+
'@_version': '1.0',
|
|
97
|
+
'@_encoding': 'UTF-8'
|
|
98
|
+
},
|
|
99
|
+
project: {
|
|
100
|
+
'@_version': '4',
|
|
101
|
+
component: {
|
|
102
|
+
'@_name': 'ProjectModuleManager',
|
|
103
|
+
modules: [
|
|
104
|
+
{
|
|
105
|
+
module: {
|
|
106
|
+
'@_fileurl': fileFormattedUrl,
|
|
107
|
+
'@_filepath': fileFormattedPath
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
await buildXmlFile(pathToModulesConfig, modulesConfig);
|
|
116
|
+
|
|
117
|
+
return filePath;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
122
|
+
*/
|
|
123
|
+
const setupExcludedFoldersConfig = () => ({
|
|
124
|
+
title: 'Set up excluded folders configuration',
|
|
125
|
+
task: async (ctx, task) => {
|
|
126
|
+
if (await pathExists(pathToModulesConfig)) {
|
|
127
|
+
const projectFilePath = await getProjectConfigFilePath();
|
|
128
|
+
const projectConfigData = await loadXmlFile(projectFilePath);
|
|
129
|
+
const excludedFoldersConfig = getExcludedFoldersConfig(projectConfigData);
|
|
130
|
+
const hasChanges = setupExcludedFolders(excludedFoldersConfig);
|
|
131
|
+
if (hasChanges) {
|
|
132
|
+
await buildXmlFile(projectFilePath, projectConfigData);
|
|
133
|
+
} else {
|
|
134
|
+
task.skip();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const projectFilePath = await createModulesXML();
|
|
141
|
+
const projectConfigData = {
|
|
142
|
+
'?xml': {
|
|
143
|
+
'@_version': '1.0',
|
|
144
|
+
'@_encoding': 'UTF-8'
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const excludedFoldersConfig = getExcludedFoldersConfig(projectConfigData);
|
|
148
|
+
setupExcludedFolders(excludedFoldersConfig);
|
|
149
|
+
|
|
150
|
+
await buildXmlFile(projectFilePath, projectConfigData);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
module.exports = setupExcludedFoldersConfig;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const setupWorkspaceConfig = require('./workspace-config');
|
|
2
|
+
const setupPhpConfig = require('./php-config');
|
|
3
|
+
const setupDatabaseConfig = require('./database-config');
|
|
4
|
+
const setupInspectionToolsConfig = require('./inspection-tools-config');
|
|
5
|
+
const setupExcludedFoldersConfig = require('./exclude-folder-config');
|
|
6
|
+
const setupStylelintConfig = require('./stylelint-config');
|
|
7
|
+
const setupESLintConfig = require('./eslint-config');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @type {() => import('listr2').ListrTask<import('../../../../typings/context').ListrContext>}
|
|
11
|
+
*/
|
|
12
|
+
const createPhpStormConfig = () => ({
|
|
13
|
+
title: 'Setting PHPStorm config',
|
|
14
|
+
task: (ctx, task) => task.newListr([
|
|
15
|
+
setupWorkspaceConfig(),
|
|
16
|
+
setupPhpConfig(),
|
|
17
|
+
setupDatabaseConfig(),
|
|
18
|
+
setupInspectionToolsConfig(),
|
|
19
|
+
setupExcludedFoldersConfig(),
|
|
20
|
+
setupStylelintConfig(),
|
|
21
|
+
setupESLintConfig()
|
|
22
|
+
], {
|
|
23
|
+
concurrent: true
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
module.exports = createPhpStormConfig;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const { nameKey, valueKey } = require('../keys');
|
|
2
|
+
const {
|
|
3
|
+
options: {
|
|
4
|
+
CODING_STANDARD_OPTION_NAME,
|
|
5
|
+
CUSTOM_CODING_STANDARD_OPTION_VALUE
|
|
6
|
+
}
|
|
7
|
+
} = require('./config');
|
|
8
|
+
|
|
9
|
+
const setupCodingStandardOption = async (config) => {
|
|
10
|
+
let hasChanges = false;
|
|
11
|
+
const codingStandardOption = config.option.find(
|
|
12
|
+
(option) => option[nameKey] === CODING_STANDARD_OPTION_NAME
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
if (!codingStandardOption) {
|
|
16
|
+
hasChanges = true;
|
|
17
|
+
config.option.push({
|
|
18
|
+
[nameKey]: CODING_STANDARD_OPTION_NAME,
|
|
19
|
+
[valueKey]: CUSTOM_CODING_STANDARD_OPTION_VALUE
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return hasChanges;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
module.exports = setupCodingStandardOption;
|