zmp-cli 3.5.4 → 3.6.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.
Files changed (32) hide show
  1. package/.vscode/launch.json +21 -0
  2. package/.vscode/settings.json +2 -1
  3. package/create/templates/common/tailwind/tailwind.config.js +1 -1
  4. package/create/templates/generate-index.js +1 -1
  5. package/create/templates/generate-routes.js +2 -2
  6. package/create/templates/generate-store.js +33 -0
  7. package/create/templates/generate-styles.js +19 -10
  8. package/create/templates/vue/components/header.vue +28 -0
  9. package/create/templates/vue/components/sun-and-moon.vue +34 -0
  10. package/create/templates/vue/copy-assets.js +28 -7
  11. package/create/templates/vue/dist/copy-assets.dev.js +1 -1
  12. package/create/templates/vue/generate-home-page.js +49 -103
  13. package/create/templates/vue/generate-root.js +30 -193
  14. package/create/templates/vue/generate-routes.js +2 -87
  15. package/create/templates/vue/generate-scripts.js +8 -3
  16. package/create/templates/vue/global-components.d.ts +121 -0
  17. package/create/templates/vue/icons/moon.svg +3 -0
  18. package/create/templates/vue/icons/sun.svg +3 -0
  19. package/create/templates/vue/pages/settings.vue +14 -158
  20. package/create/templates/vue/vite.config.js +11 -0
  21. package/create/utils/generate-package-json.js +14 -6
  22. package/create/utils/get-options.js +7 -8
  23. package/index.js +1 -0
  24. package/package.json +1 -1
  25. package/start/dist/index.dev.js +65 -28
  26. package/start/index.js +41 -4
  27. package/utils/find-files-by-ext.js +1 -1
  28. package/create/templates/common/icons/128x128.png +0 -0
  29. package/create/templates/common/icons/144x144.png +0 -0
  30. package/create/templates/common/icons/152x152.png +0 -0
  31. package/create/templates/common/icons/192x192.png +0 -0
  32. package/create/templates/common/icons/256x256.png +0 -0
@@ -6,7 +6,7 @@ module.exports = function generatePackageJson(options) {
6
6
 
7
7
  // Dependencies
8
8
  const dependencies = ['zmp-framework', 'zmp-sdk', 'swiper'];
9
- const dependenciesVue = ['vue@3'];
9
+ const dependenciesVue = ['vue@3', 'zmp-framework@next'];
10
10
  const dependenciesReact = ['react', 'react-dom', 'prop-types'];
11
11
  const dependenciesReactTs = ['@types/react', '@types/react-dom'];
12
12
  const tailwindDependencies = [
@@ -41,8 +41,16 @@ module.exports = function generatePackageJson(options) {
41
41
  ...[devDependenciesReact],
42
42
  ...(includeTailwind ? tailwindDependencies : [])
43
43
  );
44
- else if (framework === 'vue') devDependencies.push(...[devDependenciesVue]);
45
- else if (framework === 'core') devDependencies.push(...[devDependenciesCore]);
44
+ else if (framework === 'vue')
45
+ devDependencies.push(
46
+ ...devDependenciesVue,
47
+ ...(includeTailwind ? tailwindDependencies : [])
48
+ );
49
+ else if (framework === 'core')
50
+ devDependencies.push(
51
+ ...devDependenciesCore,
52
+ ...(includeTailwind ? tailwindDependencies : [])
53
+ );
46
54
 
47
55
  // Scripts
48
56
  const scripts = {};
@@ -64,9 +72,9 @@ module.exports = function generatePackageJson(options) {
64
72
  const content = `
65
73
  {
66
74
  "name": "${name
67
- .toLowerCase()
68
- .replace(/[ ]{2,}/, ' ')
69
- .replace(/ /g, '-')}",
75
+ .toLowerCase()
76
+ .replace(/[ ]{2,}/, ' ')
77
+ .replace(/ /g, '-')}",
70
78
  "private": true,
71
79
  "version": "1.0.0",
72
80
  "description": "${name}",
@@ -40,14 +40,13 @@ const questions = [
40
40
  name: 'ZMP with React (TypeScript)',
41
41
  value: 'react-typescript',
42
42
  },
43
- {
44
- name: 'ZMP Core',
45
- value: 'core',
46
- disabled: true,
47
- },
48
43
  {
49
44
  name: 'ZMP with Vue.js',
50
45
  value: 'vue',
46
+ },
47
+ {
48
+ name: 'ZMP Core',
49
+ value: 'core',
51
50
  disabled: true,
52
51
  },
53
52
  ],
@@ -55,7 +54,7 @@ const questions = [
55
54
  {
56
55
  type: 'list',
57
56
  name: 'useUIKits',
58
- when: (opts) => opts.newProject,
57
+ when: (opts) => opts.newProject && opts.framework !== 'vue',
59
58
  message: 'Do you want to use Zalo UI kits style?',
60
59
  default: true,
61
60
  choices: [
@@ -74,7 +73,7 @@ const questions = [
74
73
  {
75
74
  type: 'list',
76
75
  name: 'template',
77
- when: (opts) => opts.newProject && opts.useUIKits,
76
+ when: (opts) => opts.newProject && opts.useUIKits && opts.framework !== 'vue',
78
77
  message: 'Choose starter template:',
79
78
  choices: [
80
79
  {
@@ -101,7 +100,7 @@ const questions = [
101
100
  {
102
101
  type: 'list',
103
102
  name: 'template',
104
- when: (opts) => opts.newProject && !opts.useUIKits,
103
+ when: (opts) => opts.newProject && !opts.useUIKits && opts.framework !== 'vue',
105
104
  message: 'Choose starter template:',
106
105
  choices: [
107
106
  {
package/index.js CHANGED
@@ -28,6 +28,7 @@ const config = require('./config');
28
28
  require('dotenv').config({ path: config.root_env() });
29
29
 
30
30
  const cwd = process.cwd();
31
+
31
32
  const logger = {
32
33
  statusStart: (text) => spinner.start(text),
33
34
  statusDone: (text) => spinner.done(text),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zmp-cli",
3
- "version": "3.5.4",
3
+ "version": "3.6.0",
4
4
  "description": "ZMP command line utility (CLI)",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -15,21 +15,20 @@ var ora = require('ora');
15
15
 
16
16
  var path = require('path');
17
17
 
18
- var config = require('../config');
18
+ var qrcode = require('qrcode-terminal');
19
19
 
20
- var envUtils = require('../utils/env');
20
+ var logSymbols = require('log-symbols');
21
21
 
22
22
  var _require = require('vite'),
23
23
  createServer = _require.createServer;
24
24
 
25
- var fs = require('../utils/fs-extra');
25
+ var config = require('../config');
26
26
 
27
- var qrcode = require('qrcode-terminal');
27
+ var envUtils = require('../utils/env');
28
28
 
29
- var logSymbols = require('log-symbols');
29
+ var fs = require('../utils/fs-extra');
30
30
 
31
- var _require2 = require('path'),
32
- resolve = _require2.resolve;
31
+ var fse = require('../utils/fs-extra');
33
32
 
34
33
  var spinner = ora('Starting mini app...');
35
34
 
@@ -50,9 +49,12 @@ module.exports = function _callee() {
50
49
  hrConfig,
51
50
  localServer,
52
51
  publicServer,
52
+ viteConfig,
53
+ isTypeScriptProject,
53
54
  server,
54
55
  app,
55
56
  serverFrame,
57
+ info,
56
58
  _args = arguments;
57
59
 
58
60
  return regeneratorRuntime.async(function _callee$(_context) {
@@ -112,50 +114,65 @@ module.exports = function _callee() {
112
114
  host: host
113
115
  }
114
116
  };
115
- _context.next = 18;
117
+ viteConfig = 'vite.config.js';
118
+ isTypeScriptProject = fse.existsSync(path.join(cwd, 'vite.config.ts'));
119
+
120
+ if (isTypeScriptProject) {
121
+ viteConfig = 'vite.config.ts';
122
+ }
123
+
124
+ _context.next = 21;
116
125
  return regeneratorRuntime.awrap(createServer({
117
- configFile: path.join(cwd, 'vite.config.js'),
126
+ configFile: path.join(cwd, viteConfig),
118
127
  root: cwd,
119
128
  mode: previewOnZalo ? 'production' : 'development',
120
129
  define: {
121
130
  'process.env.NODE_ENV': JSON.stringify(previewOnZalo ? 'production' : 'development')
122
131
  },
123
132
  server: _objectSpread({
124
- port: port,
125
- strictPort: true
133
+ port: port - 1
126
134
  }, previewOnZalo ? publicServer : localServer)
127
135
  }));
128
136
 
129
- case 18:
137
+ case 21:
130
138
  server = _context.sent;
131
- _context.next = 21;
139
+ _context.next = 24;
132
140
  return regeneratorRuntime.awrap(server.listen());
133
141
 
134
- case 21:
142
+ case 24:
135
143
  app = _context.sent;
136
144
 
137
145
  if (previewOnZalo) {
138
- _context.next = 27;
146
+ _context.next = 35;
139
147
  break;
140
148
  }
141
149
 
142
- _context.next = 25;
150
+ _context.next = 28;
143
151
  return regeneratorRuntime.awrap(createServer({
144
152
  // any valid user config options, plus `mode` and `configFile`
145
153
  configFile: false,
146
154
  root: __dirname + '/frame',
147
155
  server: {
148
- port: port + 1
156
+ port: app.httpServer.address().port + 1,
157
+ strictPort: true,
158
+ open: true
149
159
  }
150
160
  }));
151
161
 
152
- case 25:
162
+ case 28:
153
163
  serverFrame = _context.sent;
154
- serverFrame.listen();
164
+ _context.next = 31;
165
+ return regeneratorRuntime.awrap(serverFrame.listen());
166
+
167
+ case 31:
168
+ spinner.stop();
169
+ info = serverFrame.config.logger.info;
170
+ info(chalk.green("Zalo Mini App dev server is running at:\n"));
171
+ serverFrame.printUrls();
155
172
 
156
- case 27:
173
+ case 35:
157
174
  spinner.stop();
158
- _context.next = 30;
175
+ _context.next = 38;
159
176
  return regeneratorRuntime.awrap(new Promise(function () {
160
177
  var previewOnZaloURL = "https://zalo.me/app/link/zapps/".concat(appId, "/?env=TESTING_LOCAL&clientIp=https://").concat(host, ":").concat(app.config.server.port);
161
178
 
@@ -167,17 +184,37 @@ module.exports = function _callee() {
167
184
  qrcode.generate(previewOnZaloURL, {
168
185
  small: true
169
186
  }, function (qrcode) {
170
- var qrCode = "".concat(logSymbols.info, " ").concat(chalk.bold("Scan the QR code with Zalo app:\n".concat(qrcode)));
171
- logger.text(qrCode);
187
+ logger.text(chalk.green("".concat(logSymbols.info, " ").concat(chalk.bold("Zalo Mini App dev server is running at: ".concat(host, ":").concat(app.config.server.port)))));
188
+ logger.text(chalk.green("".concat(logSymbols.info, " ").concat(chalk.bold("Trying reverse socket connection"))));
189
+
190
+ var processAdbReverse = require('child_process').spawn("adb", ['reverse', "tcp:".concat(app.config.server.port), "tcp:".concat(app.config.server.port)]);
191
+
192
+ processAdbReverse.stderr.on('data', function (data) {
193
+ logger.error(data.toString());
194
+ });
195
+ processAdbReverse.on('exit', function (code) {
196
+ if (code !== 0) {
197
+ throw new Error("adb reverse error: ".concat(code));
198
+ } else {
199
+ var qrCode = "".concat(logSymbols.info, " ").concat(chalk.bold("Scan the QR code with Zalo app:\n".concat(qrcode)));
200
+ logger.text(qrCode);
201
+
202
+ var processAdbDevices = require('child_process').spawn("adb", ['devices']);
203
+
204
+ processAdbDevices.stdout.on('data', function (data) {
205
+ logger.text("".concat(chalk.yellow(data.toString())));
206
+ });
207
+ }
208
+ });
172
209
  });
173
210
  }
174
211
  }));
175
212
 
176
- case 30:
213
+ case 38:
177
214
  return _context.abrupt("return", _context.sent);
178
215
 
179
- case 33:
180
- _context.prev = 33;
216
+ case 41:
217
+ _context.prev = 41;
181
218
  _context.t0 = _context["catch"](12);
182
219
  logger.statusError('Error starting project'); // if (err) logger.error(err.stderr || err);
183
220
 
@@ -185,10 +222,10 @@ module.exports = function _callee() {
185
222
  errorExit(_context.t0);
186
223
  return _context.abrupt("return");
187
224
 
188
- case 39:
225
+ case 47:
189
226
  case "end":
190
227
  return _context.stop();
191
228
  }
192
229
  }
193
- }, null, null, [[12, 33]]);
230
+ }, null, null, [[12, 41]]);
194
231
  };
package/start/index.js CHANGED
@@ -121,10 +121,47 @@ module.exports = async (options = {}, logger, { exitOnError = true } = {}) => {
121
121
  .unref();
122
122
  } else if (previewOnZalo) {
123
123
  qrcode.generate(previewOnZaloURL, { small: true }, function (qrcode) {
124
- const qrCode = `${logSymbols.info} ${chalk.bold(
125
- `Scan the QR code with Zalo app:\n${qrcode}`
126
- )}`;
127
- logger.text(qrCode);
124
+ logger.text(
125
+ chalk.green(
126
+ `${logSymbols.info} ${chalk.bold(
127
+ `Zalo Mini App dev server is running at: ${host}:${app.config.server.port}`
128
+ )}`
129
+ )
130
+ );
131
+ logger.text(
132
+ chalk.green(
133
+ `${logSymbols.info} ${chalk.bold(
134
+ `Trying reverse socket connection`
135
+ )}`
136
+ )
137
+ );
138
+ const processAdbReverse = require('child_process').spawn(`adb`, [
139
+ 'reverse',
140
+ `tcp:${app.config.server.port}`,
141
+ `tcp:${app.config.server.port}`,
142
+ ]);
143
+
144
+ processAdbReverse.stderr.on('data', function (data) {
145
+ logger.error(data.toString());
146
+ });
147
+
148
+ processAdbReverse.on('exit', function (code) {
149
+ if (code !== 0) {
150
+ throw new Error(`adb reverse error: ${code}`);
151
+ } else {
152
+ const qrCode = `${logSymbols.info} ${chalk.bold(
153
+ `Scan the QR code with Zalo app:\n${qrcode}`
154
+ )}`;
155
+ logger.text(qrCode);
156
+ const processAdbDevices = require('child_process').spawn(`adb`, [
157
+ 'devices',
158
+ ]);
159
+
160
+ processAdbDevices.stdout.on('data', function (data) {
161
+ logger.text(`${chalk.yellow(data.toString())}`);
162
+ });
163
+ }
164
+ });
128
165
  });
129
166
  }
130
167
  });
@@ -3,7 +3,7 @@ const path = require('path');
3
3
 
4
4
  module.exports = function findFilesByExt(
5
5
  folderPath,
6
- extension = ['jsx', 'tsx']
6
+ extension = ['jsx', 'tsx', 'vue']
7
7
  ) {
8
8
  var files = fs.readdirSync(folderPath);
9
9
  var result = [];