devextreme-cli 1.4.2 → 1.5.0
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/package.json +5 -5
- package/src/applications/application.angular.js +13 -9
- package/src/applications/application.react.js +4 -3
- package/src/applications/application.vue.js +17 -46
- package/src/templates/react/application/src/layouts/side-nav-inner-toolbar/side-nav-inner-toolbar.tsx +1 -1
- package/src/templates/react/application/src/layouts/side-nav-outer-toolbar/side-nav-outer-toolbar.tsx +1 -1
- package/src/templates/vue-v2/application/src/main.js +7 -4
- package/src/templates/vue-v2/application/vue.config.js +1 -3
- package/src/templates/vue-v3/application/src/main.js +7 -4
- package/src/templates/vue-v3/application/vue.config.js +1 -3
- package/src/utility/extract-tooling-version.js +13 -0
- package/src/utility/latest-versions.js +3 -3
- package/src/utility/prompts/typescript.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devextreme-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "DevExtreme CLI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"devexpress",
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
"eslint-plugin-angular": "^4.1.0",
|
|
60
60
|
"eslint-plugin-jest": "^22.21.0",
|
|
61
61
|
"eslint-plugin-prettier": "^4.0.0",
|
|
62
|
-
"eslint-plugin-react": "^7.
|
|
63
|
-
"eslint-plugin-react-hooks": "^4.
|
|
62
|
+
"eslint-plugin-react": "^7.30.1",
|
|
63
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
64
64
|
"eslint-plugin-unused-imports": "^1.1.5",
|
|
65
65
|
"eslint-plugin-vue": "^7.0.0-beta.2",
|
|
66
66
|
"eslint-stylish": "^0.2.0",
|
|
67
67
|
"jest": "^27.3.1",
|
|
68
|
-
"jest-image-snapshot": "^
|
|
68
|
+
"jest-image-snapshot": "^5.1.1",
|
|
69
69
|
"prettier": "^2.6.2",
|
|
70
70
|
"puppeteer": "^2.1.1",
|
|
71
71
|
"rimraf": "^2.6.3",
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
"typescript": "^4.0.2",
|
|
75
75
|
"typescript-eslint-parser": "^22.0.0"
|
|
76
76
|
},
|
|
77
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "60feb5c896aefd4f7b717b844547cd30f86b313e"
|
|
78
78
|
}
|
|
@@ -7,6 +7,7 @@ const fs = require('fs');
|
|
|
7
7
|
const dasherize = require('../utility/string').dasherize;
|
|
8
8
|
const ngVersion = require('../utility/ng-version');
|
|
9
9
|
const latestVersions = require('../utility/latest-versions');
|
|
10
|
+
const { extractToolingVersion, toolingVersionOptionName } = require('../utility/extract-tooling-version');
|
|
10
11
|
const schematicsVersion = latestVersions['devextreme-schematics'] || 'latest';
|
|
11
12
|
|
|
12
13
|
const minNgCliVersion = new semver('12.0.0');
|
|
@@ -21,26 +22,29 @@ async function runSchematicCommand(schematicCommand, options, evaluatingOptions)
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
if(!localPackageExists(collectionName)) {
|
|
24
|
-
await runNgCommand(['add', collectionPath, '--skip-confirmation=true'], evaluatingOptions);
|
|
25
|
+
await runNgCommand(['add', collectionPath, '--skip-confirmation=true'], options, evaluatingOptions);
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
const commandArguments = ['g', `${collectionName}:${schematicCommand}`];
|
|
28
|
-
|
|
29
|
+
|
|
30
|
+
const { [toolingVersionOptionName]: _, ...optionsToArguments } = options; // eslint-disable-line no-unused-vars
|
|
31
|
+
for(let option in optionsToArguments) {
|
|
29
32
|
commandArguments.push(`--${dasherize(option)}=${options[option]}`);
|
|
30
33
|
}
|
|
31
34
|
|
|
32
|
-
runNgCommand(commandArguments, evaluatingOptions);
|
|
35
|
+
runNgCommand(commandArguments, options, evaluatingOptions);
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
async function runNgCommand(commandArguments,
|
|
38
|
+
async function runNgCommand(commandArguments, commandOptions, commandConfig) {
|
|
36
39
|
const hasNg = await hasSutableNgCli();
|
|
37
|
-
const
|
|
38
|
-
const
|
|
40
|
+
const toolingVersion = extractToolingVersion(commandOptions);
|
|
41
|
+
const npmCommandName = hasNg && !toolingVersion ? 'ng' : 'npx';
|
|
42
|
+
const ngCommandArguments = hasNg && !toolingVersion
|
|
39
43
|
? []
|
|
40
|
-
: ['-p',
|
|
44
|
+
: ['-p', `@angular/cli${toolingVersion}`, 'ng'];
|
|
41
45
|
|
|
42
46
|
ngCommandArguments.push(...commandArguments);
|
|
43
|
-
return runCommand(npmCommandName, ngCommandArguments,
|
|
47
|
+
return runCommand(npmCommandName, ngCommandArguments, commandConfig);
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
function localPackageExists(packageName) {
|
|
@@ -81,7 +85,7 @@ const create = async(appName, options) => {
|
|
|
81
85
|
'--skip-install=true',
|
|
82
86
|
];
|
|
83
87
|
|
|
84
|
-
await runNgCommand(commandArguments);
|
|
88
|
+
await runNgCommand(commandArguments, options);
|
|
85
89
|
|
|
86
90
|
const appPath = path.join(process.cwd(), appName);
|
|
87
91
|
|
|
@@ -13,9 +13,9 @@ const stringUtils = require('../utility/string');
|
|
|
13
13
|
const typescriptUtils = require('../utility/typescript-extension');
|
|
14
14
|
const removeFile = require('../utility/file-operations').remove;
|
|
15
15
|
const latestVersions = require('../utility/latest-versions');
|
|
16
|
+
const { extractToolingVersion } = require('../utility/extract-tooling-version');
|
|
16
17
|
const defaultStyles = [
|
|
17
|
-
'devextreme/dist/css/dx.light.css'
|
|
18
|
-
'devextreme/dist/css/dx.common.css'
|
|
18
|
+
'devextreme/dist/css/dx.light.css'
|
|
19
19
|
];
|
|
20
20
|
|
|
21
21
|
const getExtension = (appPath) => {
|
|
@@ -60,8 +60,9 @@ const create = async(appName, options) => {
|
|
|
60
60
|
layout: stringUtils.classify(layoutType),
|
|
61
61
|
isTypeScript: typescriptUtils.isTypeScript(templateType)
|
|
62
62
|
});
|
|
63
|
+
const toolingVersion = extractToolingVersion(options);
|
|
64
|
+
const commandArguments = [`-p=create-react-app${toolingVersion}`, 'create-react-app', appName];
|
|
63
65
|
|
|
64
|
-
const commandArguments = ['-p=create-react-app', 'create-react-app', appName];
|
|
65
66
|
if(templateOptions.isTypeScript) {
|
|
66
67
|
commandArguments.push('--template typescript');
|
|
67
68
|
}
|
|
@@ -2,7 +2,6 @@ const path = require('path');
|
|
|
2
2
|
const fs = require('fs');
|
|
3
3
|
const getLayoutInfo = require('../utility/prompts/layout');
|
|
4
4
|
const getVersionInfo = require('../utility/prompts/vue-version');
|
|
5
|
-
const getTemplateTypeInfo = require('../utility/prompts/typescript');
|
|
6
5
|
const templateCreator = require('../utility/template-creator');
|
|
7
6
|
const packageManager = require('../utility/package-manager');
|
|
8
7
|
const packageJsonUtils = require('../utility/package-json-utils');
|
|
@@ -10,11 +9,10 @@ const runCommand = require('../utility/run-command');
|
|
|
10
9
|
const insertItemToArray = require('../utility/file-content').insertItemToArray;
|
|
11
10
|
const moduleUtils = require('../utility/module');
|
|
12
11
|
const stringUtils = require('../utility/string');
|
|
13
|
-
const typescriptUtils = require('../utility/typescript-extension');
|
|
14
12
|
const latestVersions = require('../utility/latest-versions');
|
|
13
|
+
const { toolingVersionOptionName, extractToolingVersion } = require('../utility/extract-tooling-version');
|
|
15
14
|
const defaultStyles = [
|
|
16
|
-
'devextreme/dist/css/dx.light.css'
|
|
17
|
-
'devextreme/dist/css/dx.common.css'
|
|
15
|
+
'devextreme/dist/css/dx.light.css'
|
|
18
16
|
];
|
|
19
17
|
const defaultVueVersion = 'v3';
|
|
20
18
|
|
|
@@ -56,19 +54,14 @@ const preparePackageJsonForTemplate = (appPath, appName, version) => {
|
|
|
56
54
|
};
|
|
57
55
|
|
|
58
56
|
async function createVueApp(name, templateOptions) {
|
|
59
|
-
const { version
|
|
60
|
-
const
|
|
57
|
+
const { version } = templateOptions;
|
|
58
|
+
const toolingVersion = extractToolingVersion(templateOptions);
|
|
59
|
+
const argList = ['-p', `@vue/cli${toolingVersion}`, 'vue', 'create', name];
|
|
61
60
|
|
|
62
|
-
if(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
argList.push(`-p "${presetPath}"`);
|
|
61
|
+
if(version === 'v2') {
|
|
62
|
+
argList.push('-p "Default (Vue 2)"');
|
|
66
63
|
} else {
|
|
67
|
-
|
|
68
|
-
argList.push('-p "Default (Vue 2)"');
|
|
69
|
-
} else {
|
|
70
|
-
argList.push('-p "Default (Vue 3)"');
|
|
71
|
-
}
|
|
64
|
+
argList.push('-p "Default (Vue 3)"');
|
|
72
65
|
}
|
|
73
66
|
|
|
74
67
|
return runCommand('npx', argList);
|
|
@@ -76,14 +69,13 @@ async function createVueApp(name, templateOptions) {
|
|
|
76
69
|
|
|
77
70
|
const create = async(appName, options) => {
|
|
78
71
|
const version = await getVersionInfo(options.version);
|
|
79
|
-
const templateType = await getTemplateTypeInfo(options.template);
|
|
80
72
|
const layout = await getLayoutInfo(options.layout);
|
|
81
73
|
|
|
82
74
|
const templateOptions = {
|
|
83
75
|
project: stringUtils.humanize(appName),
|
|
84
76
|
layout: layout,
|
|
85
77
|
version: version,
|
|
86
|
-
|
|
78
|
+
[toolingVersionOptionName]: options[toolingVersionOptionName]
|
|
87
79
|
};
|
|
88
80
|
|
|
89
81
|
await createVueApp(appName, templateOptions);
|
|
@@ -107,16 +99,13 @@ const getCorrectPath = (extension, pathToApp) => {
|
|
|
107
99
|
};
|
|
108
100
|
|
|
109
101
|
const addTemplate = (appPath, appName, templateOptions) => {
|
|
110
|
-
|
|
102
|
+
let { version } = templateOptions;
|
|
111
103
|
|
|
112
104
|
if(!version) {
|
|
113
105
|
version = getVueVersion();
|
|
114
106
|
}
|
|
115
107
|
|
|
116
|
-
const applicationTemplatePath = path.join(
|
|
117
|
-
templateCreator.getTempaltePath(`vue-${version}`, isTypeScript),
|
|
118
|
-
'application'
|
|
119
|
-
);
|
|
108
|
+
const applicationTemplatePath = path.join(templateCreator.getTempaltePath(`vue-${version}`), 'application');
|
|
120
109
|
const styles = [
|
|
121
110
|
'./themes/generated/theme.additional.css',
|
|
122
111
|
'./themes/generated/theme.base.css',
|
|
@@ -140,12 +129,7 @@ const install = (options, appPath, styles) => {
|
|
|
140
129
|
};
|
|
141
130
|
|
|
142
131
|
const addStylesToApp = (appPath, styles) => {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
const mainModulePath = typescriptUtils.setFileExtension(
|
|
146
|
-
path.join(appPath, 'src', 'main.js'),
|
|
147
|
-
isTypeScript
|
|
148
|
-
);
|
|
132
|
+
const mainModulePath = path.join(appPath, 'src', 'main.js');
|
|
149
133
|
|
|
150
134
|
styles.forEach(style => {
|
|
151
135
|
moduleUtils.insertImport(mainModulePath, style);
|
|
@@ -153,16 +137,13 @@ const addStylesToApp = (appPath, styles) => {
|
|
|
153
137
|
};
|
|
154
138
|
|
|
155
139
|
const addSamplePages = (appPath, templateOptions) => {
|
|
156
|
-
|
|
140
|
+
let { version } = templateOptions;
|
|
157
141
|
|
|
158
142
|
if(!version) {
|
|
159
143
|
version = getVueVersion();
|
|
160
144
|
}
|
|
161
145
|
|
|
162
|
-
const samplePageTemplatePath = path.join(
|
|
163
|
-
templateCreator.getTempaltePath(`vue-${version}`, isTypeScript),
|
|
164
|
-
'sample-pages'
|
|
165
|
-
);
|
|
146
|
+
const samplePageTemplatePath = path.join(templateCreator.getTempaltePath(`vue-${version}`), 'sample-pages');
|
|
166
147
|
const pagesPath = createPathToPage(appPath);
|
|
167
148
|
templateCreator.moveTemplateFilesToProject(samplePageTemplatePath, pagesPath, {}, getCorrectPath);
|
|
168
149
|
};
|
|
@@ -216,23 +197,13 @@ const createPathToPage = (appPath) => {
|
|
|
216
197
|
|
|
217
198
|
const addView = (pageName, options) => {
|
|
218
199
|
const version = getVueVersion();
|
|
219
|
-
const isTypeScript = typescriptUtils.isTypeScript(typescriptUtils.getTemplateType('vue'));
|
|
220
200
|
|
|
221
|
-
const pageTemplatePath = path.join(
|
|
222
|
-
templateCreator.getTempaltePath(`vue-${version}`, isTypeScript),
|
|
223
|
-
'page'
|
|
224
|
-
);
|
|
201
|
+
const pageTemplatePath = path.join(templateCreator.getTempaltePath(`vue-${version}`), 'page');
|
|
225
202
|
|
|
226
203
|
const componentName = getComponentPageName(pageName);
|
|
227
204
|
const pathToPage = createPathToPage(process.cwd());
|
|
228
|
-
const routingModulePath =
|
|
229
|
-
|
|
230
|
-
isTypeScript
|
|
231
|
-
);
|
|
232
|
-
const navigationModulePath = typescriptUtils.setFileExtension(
|
|
233
|
-
path.join(process.cwd(), 'src', 'app-navigation.js'),
|
|
234
|
-
isTypeScript
|
|
235
|
-
);
|
|
205
|
+
const routingModulePath = path.join(process.cwd(), 'src', 'router.js');
|
|
206
|
+
const navigationModulePath = path.join(process.cwd(), 'src', 'app-navigation.js');
|
|
236
207
|
const navigationData = getNavigationData(pageName, componentName, options && options.icon || 'folder', version);
|
|
237
208
|
const getCorrectExtension = (fileExtension) => fileExtension;
|
|
238
209
|
templateCreator.addPageToApp(pageName, pathToPage, pageTemplatePath, getCorrectExtension);
|
|
@@ -45,7 +45,7 @@ export default function SideNavInnerToolbar({ title, children }<%=#isTypeScript%
|
|
|
45
45
|
? MenuStatus.Closed
|
|
46
46
|
: prevMenuStatus
|
|
47
47
|
);
|
|
48
|
-
return true;
|
|
48
|
+
return menuStatus === MenuStatus.Closed ? true : false;
|
|
49
49
|
}, [isLarge]);
|
|
50
50
|
|
|
51
51
|
const onNavigationChanged = useCallback(({ itemData, event, node }<%=#isTypeScript%>: ItemClickEvent<%=/isTypeScript%>) => {
|
|
@@ -43,7 +43,7 @@ export default function SideNavOuterToolbar({ title, children }<%=#isTypeScript%
|
|
|
43
43
|
? MenuStatus.Closed
|
|
44
44
|
: prevMenuStatus
|
|
45
45
|
);
|
|
46
|
-
return true;
|
|
46
|
+
return menuStatus === MenuStatus.Closed ? true : false;
|
|
47
47
|
}, [isLarge]);
|
|
48
48
|
|
|
49
49
|
const onNavigationChanged = useCallback(({ itemData, event, node }<%=#isTypeScript%>: ItemClickEvent<%=/isTypeScript%>) => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Vue from "vue";
|
|
2
|
+
import themes from "devextreme/ui/themes";
|
|
2
3
|
|
|
3
4
|
import App from "./App";
|
|
4
5
|
import router from "./router";
|
|
@@ -7,7 +8,9 @@ import appInfo from "./app-info";
|
|
|
7
8
|
Vue.config.productionTip = false;
|
|
8
9
|
Vue.prototype.$appInfo = appInfo;
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
themes.initialized(() => {
|
|
12
|
+
new Vue({
|
|
13
|
+
router,
|
|
14
|
+
render: h => h(App)
|
|
15
|
+
}).$mount("#app");
|
|
16
|
+
});
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { createApp } from "vue";
|
|
2
2
|
import router from "./router";
|
|
3
|
+
import themes from "devextreme/ui/themes";
|
|
3
4
|
|
|
4
5
|
import App from "./App";
|
|
5
6
|
import appInfo from "./app-info";
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
app
|
|
9
|
-
app.
|
|
10
|
-
app.
|
|
8
|
+
themes.initialized(() => {
|
|
9
|
+
const app = createApp(App);
|
|
10
|
+
app.use(router);
|
|
11
|
+
app.config.globalProperties.$appInfo = appInfo;
|
|
12
|
+
app.mount('#app');
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const toolingVersionOptionName = 'tooling-version';
|
|
2
|
+
|
|
3
|
+
const extractToolingVersion = (commandOptions) => {
|
|
4
|
+
if(commandOptions && commandOptions[toolingVersionOptionName]) {
|
|
5
|
+
return `@${commandOptions[toolingVersionOptionName]}`;
|
|
6
|
+
}
|
|
7
|
+
return '';
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
toolingVersionOptionName,
|
|
12
|
+
extractToolingVersion,
|
|
13
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const packageJson = require('../../package.json');
|
|
2
2
|
module.exports = {
|
|
3
|
-
'devextreme': '^22.
|
|
4
|
-
'devextreme-react': '^22.
|
|
5
|
-
'devextreme-vue': '^22.
|
|
3
|
+
'devextreme': '^22.2.3',
|
|
4
|
+
'devextreme-react': '^22.2.3',
|
|
5
|
+
'devextreme-vue': '^22.2.3',
|
|
6
6
|
'devextreme-cli': packageJson.version,
|
|
7
7
|
'devextreme-schematics': 'latest'
|
|
8
8
|
};
|