zmp-cli 3.5.3-1 → 3.5.4

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/README.git.md ADDED
@@ -0,0 +1,37 @@
1
+ # ZMP-CLI
2
+ CLI dùng để start, build, deploy Zalo Mini App
3
+
4
+ ## Contribute
5
+ Project bao gồm các nhánh:
6
+ - master: nhánh chính tương ứng với version đang release
7
+ - develop: nhánh chính, source code mới nhất bao gồm các tính năng chuẩn bị cho lần release tiếp theo
8
+ - feature/*: nhánh tương ứng với chức năng đang phát triển (xoá sau khi hoàn thành)
9
+ - release/*-rc: nhánh tương ứng với các release candidate (xoá sau khi hoàn thành)
10
+ - hotfix/*: nhánh tương ứng với bug cần fix cho version đang release (xoá sau khi hoàn thành)
11
+
12
+ Suggest sử dụng git flow để quản lí các nhánh:
13
+ 1. Cài đặt và tìm hiểu git flow theo [hướng dẫn](https://danielkummer.github.io/git-flow-cheatsheet/index.vi_VN.html)
14
+ 2. Init git flow tương ứng với các branch trên: ```git flow init```
15
+
16
+ Phát triển một tính năng mới:
17
+ 1. Để bắt đầu code tính năng mới: ```git flow feature start feature_1```
18
+ 2. Sau khi code và test xong: ```git flow feature finish feature_1```, tính năng sẽ được merge vào nhánh develop
19
+
20
+ Tạo một release candidate (suffix "-rc"):
21
+ 1. ```git flow release start <major>.<minor>.<patch>-rc```
22
+ 2. Sau khi test xong: ```git flow release finish <major>.<minor>.<patch>-rc```, tính năng sẽ được merge vào nhánh master để chờ release và nhánh develop
23
+
24
+ Để fix bug trên bản release:
25
+ 1. ```git flow hotfix start bug-a```
26
+ 2. Sau khi fix xong: ```git flow hotfix finish bug-a```, tính năng sẽ được merge vào nhánh master để chờ release và nhánh develop
27
+
28
+ Để fix bug trên bản release-candidate:
29
+ 1. Tạo nhánh mới từ nhánh rc muốn fix với refix: ```git branch ```
30
+ 2. Sau khi fix xong: ```git flow hotfix finish bug-a```, tính năng sẽ được merge vào nhánh master để chờ release và nhánh develop
31
+
32
+ Để release nhánh master:
33
+ 1. ```npm run release```
34
+ 2. Nhập version:
35
+ - patch: fix bug
36
+ - minor: thêm tính năng
37
+ - major: thay đổi lớn có ảnh hưởng tới version cũ
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  module.exports = {
4
+ filename: {
5
+ appConfig: 'app-config.json',
6
+ zmpConfig: 'zmp-cli.json'
7
+ },
4
8
  api_domain: {
5
9
  dev: 'https://dev-zmp-api.developers.zalo.me/',
6
10
  prod: 'https://zmp-api.developers.zalo.me/'
7
11
  },
8
12
  zdn_url: {
9
- dev: 'https://dev.h5.zalo.me/zapps/',
10
- prod: 'https://h5.zdn.vn/zapps/'
13
+ dev: '//dev.h5.zalo.me/zapps/',
14
+ prod: '//h5.zdn.vn/zapps/'
11
15
  },
12
16
  path: {
13
17
  login: 'admin/login',
@@ -19,24 +23,30 @@ module.exports = {
19
23
  getAppInfo: 'app/get-info'
20
24
  },
21
25
  dirname: __dirname,
22
- root_env: "".concat(process.cwd(), "/.env"),
26
+ root_env: function root_env() {
27
+ return "".concat(process.cwd(), "/.env");
28
+ },
23
29
  env: {
24
30
  appId: 'APP_ID',
25
31
  token: 'ZMP_TOKEN'
26
32
  },
27
33
  error_code: {
34
+ app_config_not_found: -1400,
28
35
  permission_denied: -2001,
29
36
  request_timeout: -2003
30
37
  },
31
38
  error_msg: {
39
+ app_config_not_found: "App config not found. Please re-init project. (Tips: Run 'zmp init')",
32
40
  permission_denied: "Permission denied. Please login again. (Tips: Run 'zmp login')",
33
41
  request_timeout: 'Request Timeout'
34
42
  },
35
43
  resumable_option: {
36
- chunkSize: 10 * 1024,
44
+ chunkSize: 512 * 1000,
45
+ // bytes -> 512kb/chunk
37
46
  simultaneousUploads: 4,
38
47
  testChunks: true,
39
48
  throttleProgressCallbacks: 1,
40
- method: 'octet'
49
+ method: 'octet',
50
+ forceChunkSize: false
41
51
  }
42
52
  };
package/config/index.js CHANGED
@@ -39,10 +39,11 @@ module.exports = {
39
39
  request_timeout: 'Request Timeout',
40
40
  },
41
41
  resumable_option: {
42
- chunkSize: 10 * 1024,
42
+ chunkSize: 512 * 1000, // bytes -> 512kb/chunk
43
43
  simultaneousUploads: 4,
44
44
  testChunks: true,
45
45
  throttleProgressCallbacks: 1,
46
46
  method: 'octet',
47
+ forceChunkSize: false,
47
48
  },
48
49
  };
@@ -0,0 +1,351 @@
1
+ #!/usr/bin/env node
2
+
3
+ /* eslint no-console: off */
4
+ "use strict";
5
+
6
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
7
+
8
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9
+
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+
12
+ var chalk = require('chalk');
13
+
14
+ var clear = require('clear');
15
+
16
+ var figlet = require('figlet');
17
+
18
+ var program = require('commander');
19
+
20
+ var logSymbols = require('log-symbols');
21
+
22
+ var fse = require('./utils/fs-extra');
23
+
24
+ var checkUpdate = require('./utils/check-update');
25
+
26
+ var spinner = require('./utils/spinner');
27
+
28
+ var log = require('./utils/log');
29
+
30
+ var getCurrentProject = require('./utils/get-current-project');
31
+
32
+ var getOptions = require('./create/utils/get-options');
33
+
34
+ var getLoginOptions = require('./login/utils/get-options');
35
+
36
+ var getDeployOptions = require('./deploy/utils/get-options');
37
+
38
+ var getMigrateOptions = require('./migrate/utils/get-options');
39
+
40
+ var loginApp = require('./login/index');
41
+
42
+ var createApp = require('./create/index');
43
+
44
+ var startApp = require('./start/index');
45
+
46
+ var buildApp = require('./build/index');
47
+
48
+ var deployApp = require('./deploy/index');
49
+
50
+ var migrateApp = require('./migrate/index'); // const generateAssets = require('./assets/index');
51
+ // const server = require('./ui/server');
52
+
53
+
54
+ var pkg = require('./package.json');
55
+
56
+ var config = require('./config');
57
+
58
+ require('dotenv').config({
59
+ path: config.root_env()
60
+ });
61
+
62
+ var cwd = process.cwd();
63
+ var logger = {
64
+ statusStart: function statusStart(text) {
65
+ return spinner.start(text);
66
+ },
67
+ statusDone: function statusDone(text) {
68
+ return spinner.done(text);
69
+ },
70
+ statusText: function statusText(text) {
71
+ return spinner.text(text);
72
+ },
73
+ statusError: function statusError(text) {
74
+ return spinner.error(text);
75
+ },
76
+ text: function text(_text) {
77
+ return log.text(_text);
78
+ },
79
+ error: function error(text) {
80
+ return log.error(text);
81
+ },
82
+ showOnUI: function showOnUI() {}
83
+ };
84
+ /* =============================================
85
+ Header
86
+ ============================================= */
87
+
88
+ clear();
89
+
90
+ if (!fse.existsSync(config.root_env())) {
91
+ fse.writeFileSync(config.root_env());
92
+ }
93
+
94
+ console.log(chalk.cyan(figlet.textSync('ZMP CLI', {
95
+ horizontalLayout: 'full',
96
+ verticalLayout: 'full'
97
+ })), chalk.cyan("Version: ".concat(pkg.version, "\n")));
98
+ /* =============================================
99
+ Commands
100
+ ============================================= */
101
+
102
+ program.version(pkg.version).usage('<command> [options]').command('init').option('--skipUpdate', 'Skip checking for update of zmp-cli').description('Init ZMP project').action(function _callee(options) {
103
+ var currentProject, optsLogin, opts;
104
+ return regeneratorRuntime.async(function _callee$(_context) {
105
+ while (1) {
106
+ switch (_context.prev = _context.next) {
107
+ case 0:
108
+ if (options.skipUpdate) {
109
+ _context.next = 3;
110
+ break;
111
+ }
112
+
113
+ _context.next = 3;
114
+ return regeneratorRuntime.awrap(checkUpdate());
115
+
116
+ case 3:
117
+ currentProject = getCurrentProject(cwd);
118
+
119
+ if (currentProject) {
120
+ log.text("".concat(logSymbols.error, " ZMP project already set up in current directory"));
121
+ process.exit(1);
122
+ }
123
+
124
+ _context.next = 7;
125
+ return regeneratorRuntime.awrap(getLoginOptions());
126
+
127
+ case 7:
128
+ optsLogin = _context.sent;
129
+ _context.next = 10;
130
+ return regeneratorRuntime.awrap(loginApp(_objectSpread({
131
+ cwd: cwd
132
+ }, optsLogin), logger));
133
+
134
+ case 10:
135
+ _context.next = 12;
136
+ return regeneratorRuntime.awrap(getOptions());
137
+
138
+ case 12:
139
+ opts = _context.sent;
140
+ _context.next = 15;
141
+ return regeneratorRuntime.awrap(createApp(_objectSpread({
142
+ cwd: cwd
143
+ }, opts), logger));
144
+
145
+ case 15:
146
+ process.exit(0);
147
+
148
+ case 16:
149
+ case "end":
150
+ return _context.stop();
151
+ }
152
+ }
153
+ });
154
+ });
155
+ program.usage('<command> [options]').command('login').description('Login ZMP').action(function _callee2() {
156
+ var optsLogin;
157
+ return regeneratorRuntime.async(function _callee2$(_context2) {
158
+ while (1) {
159
+ switch (_context2.prev = _context2.next) {
160
+ case 0:
161
+ _context2.next = 2;
162
+ return regeneratorRuntime.awrap(getLoginOptions());
163
+
164
+ case 2:
165
+ optsLogin = _context2.sent;
166
+ _context2.next = 5;
167
+ return regeneratorRuntime.awrap(loginApp(_objectSpread({
168
+ cwd: cwd
169
+ }, optsLogin), logger));
170
+
171
+ case 5:
172
+ process.exit(0);
173
+
174
+ case 6:
175
+ case "end":
176
+ return _context2.stop();
177
+ }
178
+ }
179
+ });
180
+ });
181
+ program.usage('<command> [options]').command('start').option('-P, --port <n>', 'Specify server port. By default it is 3000', parseInt).option('-U, --show-mobile-ui', 'Show Mobile UI').option('-Z, --zalo-app', 'Preview on zalo').option('-D, --dev', 'Development environment').description('Start a ZMP project').action(function _callee3(options) {
182
+ var currentProject;
183
+ return regeneratorRuntime.async(function _callee3$(_context3) {
184
+ while (1) {
185
+ switch (_context3.prev = _context3.next) {
186
+ case 0:
187
+ currentProject = getCurrentProject(cwd);
188
+
189
+ if (!currentProject) {
190
+ log.text("".concat(logSymbols.error, " This is not ZMP project"));
191
+ process.exit(1);
192
+ }
193
+
194
+ if (options && options.showMobileUi) {
195
+ try {
196
+ console.log(require.resolve('nw'));
197
+ } catch (e) {
198
+ console.error('NW.js module is not found. Please run "npm install -g nw@sdk"');
199
+ process.exit(e.code);
200
+ }
201
+ }
202
+
203
+ _context3.next = 5;
204
+ return regeneratorRuntime.awrap(startApp({
205
+ cwd: cwd,
206
+ port: options && options.port || 3000,
207
+ showMobileUI: options && options.showMobileUi || false,
208
+ previewOnZalo: options && options.zaloApp || false
209
+ }, logger));
210
+
211
+ case 5:
212
+ process.exit(0);
213
+
214
+ case 6:
215
+ case "end":
216
+ return _context3.stop();
217
+ }
218
+ }
219
+ });
220
+ });
221
+ program.usage('<command> [options]').command('build').description('Build a ZMP project').action(function _callee4() {
222
+ var currentProject;
223
+ return regeneratorRuntime.async(function _callee4$(_context4) {
224
+ while (1) {
225
+ switch (_context4.prev = _context4.next) {
226
+ case 0:
227
+ currentProject = getCurrentProject(cwd);
228
+
229
+ if (!currentProject) {
230
+ log.text("".concat(logSymbols.error, " This is not ZMP project"));
231
+ process.exit(1);
232
+ }
233
+
234
+ _context4.next = 4;
235
+ return regeneratorRuntime.awrap(buildApp({
236
+ cwd: cwd
237
+ }, logger));
238
+
239
+ case 4:
240
+ process.exit(0);
241
+
242
+ case 5:
243
+ case "end":
244
+ return _context4.stop();
245
+ }
246
+ }
247
+ });
248
+ });
249
+ program.usage('<command> [options]').command('deploy').option('-D, --dev', 'Deploy in Development server').option('-P, --port <n>', 'Specify UI server port. By default it is 3001', parseInt).description('Deploy a ZMP project').action(function _callee5(options) {
250
+ var currentProject, opts;
251
+ return regeneratorRuntime.async(function _callee5$(_context5) {
252
+ while (1) {
253
+ switch (_context5.prev = _context5.next) {
254
+ case 0:
255
+ currentProject = getCurrentProject(cwd);
256
+ _context5.next = 3;
257
+ return regeneratorRuntime.awrap(getDeployOptions(currentProject));
258
+
259
+ case 3:
260
+ opts = _context5.sent;
261
+ if (opts.quit) process.exit(1);
262
+ _context5.next = 7;
263
+ return regeneratorRuntime.awrap(deployApp(_objectSpread({
264
+ cwd: cwd,
265
+ dev: options && options.dev
266
+ }, opts), logger));
267
+
268
+ case 7:
269
+ process.exit(0);
270
+
271
+ case 8:
272
+ case "end":
273
+ return _context5.stop();
274
+ }
275
+ }
276
+ });
277
+ });
278
+ program.usage('<command> [options]').command('migrate').action(function _callee6() {
279
+ var currentProject, opts;
280
+ return regeneratorRuntime.async(function _callee6$(_context6) {
281
+ while (1) {
282
+ switch (_context6.prev = _context6.next) {
283
+ case 0:
284
+ currentProject = getCurrentProject(cwd);
285
+
286
+ if (!currentProject) {
287
+ logger.text("".concat(logSymbols.error, " This is not ZMP project"));
288
+ process.exit(1);
289
+ }
290
+
291
+ _context6.next = 4;
292
+ return regeneratorRuntime.awrap(getMigrateOptions());
293
+
294
+ case 4:
295
+ opts = _context6.sent;
296
+ _context6.next = 7;
297
+ return regeneratorRuntime.awrap(migrateApp(_objectSpread({
298
+ cwd: cwd
299
+ }, opts, {}, currentProject), logger));
300
+
301
+ case 7:
302
+ process.exit(0);
303
+
304
+ case 8:
305
+ case "end":
306
+ return _context6.stop();
307
+ }
308
+ }
309
+ });
310
+ }); // program
311
+ // .command('assets')
312
+ // .alias('generate-assets')
313
+ // .option('--skipUpdate', 'Skip checking for update of zmp-cli')
314
+ // .option('--ui', 'Launch assets generation UI')
315
+ // .option(
316
+ // '-P, --port <n>',
317
+ // 'Specify UI server port. By default it is 3001',
318
+ // parseInt
319
+ // )
320
+ // .description('Generate ZMP app icons and splash screens')
321
+ // .action(async (options) => {
322
+ // // Check update
323
+ // if (options.skipUpdate === undefined) {
324
+ // await checkUpdate();
325
+ // }
326
+ // const currentProject = getCurrentProject(cwd);
327
+ // if (!currentProject) {
328
+ // log.text(
329
+ // `${logSymbols.error} ZMP project not found in current directory`
330
+ // );
331
+ // process.exit(1);
332
+ // }
333
+ // if (options.ui) {
334
+ // spinner.start('Launching ZMP UI server');
335
+ // server('/assets/', options.port);
336
+ // spinner.end('Launching ZMP UI server');
337
+ // } else {
338
+ // await generateAssets({}, currentProject, logger);
339
+ // process.exit(0);
340
+ // }
341
+ // });
342
+
343
+ program.on('command:*', function (cmd) {
344
+ program.outputHelp();
345
+ log.text("\n Unknown command ".concat(cmd));
346
+ });
347
+ program.parse(process.argv);
348
+
349
+ if (!program.args.length) {
350
+ program.outputHelp();
351
+ }
package/index.js CHANGED
@@ -40,6 +40,7 @@ const logger = {
40
40
  /* =============================================
41
41
  Header
42
42
  ============================================= */
43
+
43
44
  clear();
44
45
  if (!fse.existsSync(config.root_env())) {
45
46
  fse.writeFileSync(config.root_env());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zmp-cli",
3
- "version": "3.5.3-1",
3
+ "version": "3.5.4",
4
4
  "description": "ZMP command line utility (CLI)",
5
5
  "main": "index.js",
6
6
  "bin": {