@zeppos/zeus-cli 1.0.6 → 1.0.16

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 (82) hide show
  1. package/bin/cli.js +4 -1
  2. package/config/device.js +10 -2
  3. package/config/project.js +23 -1
  4. package/modules/build.js +52 -26
  5. package/modules/config.js +55 -11
  6. package/modules/create/index.js +57 -18
  7. package/modules/create/local-app.js +28 -4
  8. package/modules/help.js +1 -0
  9. package/modules/login.js +62 -18
  10. package/modules/run.js +43 -29
  11. package/modules/simulator.js +4 -3
  12. package/package.json +3 -2
  13. package/public/template/empty/app-side/index.js +1 -1
  14. package/public/template/empty/app.js +1 -1
  15. package/public/template/empty/app.json +1 -8
  16. package/public/template/empty/pages/index.js +2 -2
  17. package/public/template/empty/setting/index.js +1 -1
  18. package/public/template/empty/watchface/index.js +13 -0
  19. package/public/template/hello-world/app.js +1 -1
  20. package/public/template/hello-world/page/i18n/en-US.po +3 -0
  21. package/public/template/timer/app.js +10 -0
  22. package/public/template/timer/app.json +50 -0
  23. package/public/template/timer/assets/gtr-3-pro/images/bg/bg.png +0 -0
  24. package/public/template/timer/assets/gtr-3-pro/images/bigNum/0.png +0 -0
  25. package/public/template/timer/assets/gtr-3-pro/images/bigNum/1.png +0 -0
  26. package/public/template/timer/assets/gtr-3-pro/images/bigNum/2.png +0 -0
  27. package/public/template/timer/assets/gtr-3-pro/images/bigNum/3.png +0 -0
  28. package/public/template/timer/assets/gtr-3-pro/images/bigNum/4.png +0 -0
  29. package/public/template/timer/assets/gtr-3-pro/images/bigNum/5.png +0 -0
  30. package/public/template/timer/assets/gtr-3-pro/images/bigNum/6.png +0 -0
  31. package/public/template/timer/assets/gtr-3-pro/images/bigNum/7.png +0 -0
  32. package/public/template/timer/assets/gtr-3-pro/images/bigNum/8.png +0 -0
  33. package/public/template/timer/assets/gtr-3-pro/images/bigNum/9.png +0 -0
  34. package/public/template/timer/assets/gtr-3-pro/images/bigNum/sp.png +0 -0
  35. package/public/template/timer/assets/gtr-3-pro/images/btn/back.png +0 -0
  36. package/public/template/timer/assets/gtr-3-pro/images/btn/lv.png +0 -0
  37. package/public/template/timer/assets/gtr-3-pro/images/btn/red.png +0 -0
  38. package/public/template/timer/assets/gtr-3-pro/images/point/bg.png +0 -0
  39. package/public/template/timer/assets/gtr-3-pro/images/point/bottom.png +0 -0
  40. package/public/template/timer/assets/gtr-3-pro/images/point/center.png +0 -0
  41. package/public/template/timer/assets/gtr-3-pro/images/point/h.png +0 -0
  42. package/public/template/timer/assets/gtr-3-pro/images/point/left.png +0 -0
  43. package/public/template/timer/assets/gtr-3-pro/images/point/m.png +0 -0
  44. package/public/template/timer/assets/gtr-3-pro/images/point/right.png +0 -0
  45. package/public/template/timer/assets/gtr-3-pro/images/point/s.png +0 -0
  46. package/public/template/timer/assets/gtr-3-pro/images/preview.png +0 -0
  47. package/public/template/timer/assets/gtr-3-pro/images/second/second.png +0 -0
  48. package/public/template/timer/assets/gtr-3-pro/images/smallNum/0.png +0 -0
  49. package/public/template/timer/assets/gtr-3-pro/images/smallNum/1.png +0 -0
  50. package/public/template/timer/assets/gtr-3-pro/images/smallNum/2.png +0 -0
  51. package/public/template/timer/assets/gtr-3-pro/images/smallNum/3.png +0 -0
  52. package/public/template/timer/assets/gtr-3-pro/images/smallNum/4.png +0 -0
  53. package/public/template/timer/assets/gtr-3-pro/images/smallNum/5.png +0 -0
  54. package/public/template/timer/assets/gtr-3-pro/images/smallNum/6.png +0 -0
  55. package/public/template/timer/assets/gtr-3-pro/images/smallNum/7.png +0 -0
  56. package/public/template/timer/assets/gtr-3-pro/images/smallNum/8.png +0 -0
  57. package/public/template/timer/assets/gtr-3-pro/images/smallNum/9.png +0 -0
  58. package/public/template/timer/assets/gtr-3-pro/images/smallNum/d.png +0 -0
  59. package/public/template/timer/assets/gtr-3-pro/images/smallNum/n.png +0 -0
  60. package/public/template/timer/assets/gtr-3-pro/images/week_ch/1.png +0 -0
  61. package/public/template/timer/assets/gtr-3-pro/images/week_ch/2.png +0 -0
  62. package/public/template/timer/assets/gtr-3-pro/images/week_ch/3.png +0 -0
  63. package/public/template/timer/assets/gtr-3-pro/images/week_ch/4.png +0 -0
  64. package/public/template/timer/assets/gtr-3-pro/images/week_ch/5.png +0 -0
  65. package/public/template/timer/assets/gtr-3-pro/images/week_ch/6.png +0 -0
  66. package/public/template/timer/assets/gtr-3-pro/images/week_ch/7.png +0 -0
  67. package/public/template/timer/assets/gtr-3-pro/images/week_en/1.png +0 -0
  68. package/public/template/timer/assets/gtr-3-pro/images/week_en/2.png +0 -0
  69. package/public/template/timer/assets/gtr-3-pro/images/week_en/3.png +0 -0
  70. package/public/template/timer/assets/gtr-3-pro/images/week_en/4.png +0 -0
  71. package/public/template/timer/assets/gtr-3-pro/images/week_en/5.png +0 -0
  72. package/public/template/timer/assets/gtr-3-pro/images/week_en/6.png +0 -0
  73. package/public/template/timer/assets/gtr-3-pro/images/week_en/7.png +0 -0
  74. package/public/template/timer/shared/buffer.js +11 -0
  75. package/public/template/timer/shared/device-polyfill.js +3 -0
  76. package/public/template/timer/shared/global.js +17 -0
  77. package/public/template/timer/shared/js-module.js +27 -0
  78. package/public/template/timer/shared/logger.js +21 -0
  79. package/public/template/timer/shared/setTimeout.js +59 -0
  80. package/public/template/timer/watchface/gtr-3-pro/index.js +1 -0
  81. package/public/template/timer/watchface/round/index.js +438 -0
  82. package/public/template/hello-world/i18n/en-US.po +0 -2
package/bin/cli.js CHANGED
@@ -19,10 +19,13 @@ yargs_1["default"].usage('Usage: $0 <command> [args?]')
19
19
  .alias('v', 'version')
20
20
  .command('init', 'init a new project in current directory', proxy, index_1.create)
21
21
  .command('create', 'add a new project to current directory', proxy, index_1.create)
22
+ // @ts-ignore
22
23
  .command('login', 'login to your account', proxy, index_1.login)
24
+ .command('logout', 'Sign out of your account', proxy, index_1.logout)
23
25
  .command('dev', 'run this project in development mode', proxy, index_1.run)
24
26
  .command('preview', 'preview this project in your device', proxy, index_1.buildPreview)
25
- .command('build', 'build this project for production', proxy, index_1.build)
27
+ // @ts-ignore
28
+ .command('build', 'build this project for production', proxy, index_1.buildProd)
26
29
  .command('config', 'set or get the config value', proxy, index_1.config)
27
30
  .fail(index_1.help)
28
31
  .argv;
package/config/device.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- var _a;
2
+ var _a, _b;
3
3
  exports.__esModule = true;
4
- exports.deviceTargets = exports.DeviceScreenType = exports.DeviceSource = exports.DevicePlatformName = exports.DeviceTarget = void 0;
4
+ exports.deviceInternalCodename = exports.deviceTargets = exports.DeviceScreenType = exports.DeviceSource = exports.DevicePlatformName = exports.DeviceTarget = void 0;
5
5
  var DeviceTarget;
6
6
  (function (DeviceTarget) {
7
7
  DeviceTarget["MADRID"] = "madrid";
@@ -87,3 +87,11 @@ exports.deviceTargets = (_a = {},
87
87
  }
88
88
  },
89
89
  _a);
90
+ exports.deviceInternalCodename = (_b = {},
91
+ _b[DeviceSource.MADRID] = DeviceTarget.MADRID,
92
+ _b[DeviceSource.MADRIDW] = DeviceTarget.MADRID,
93
+ _b[DeviceSource.VERONA] = DeviceTarget.VERONA,
94
+ _b[DeviceSource.VERONAW] = DeviceTarget.VERONA,
95
+ _b[DeviceSource.ZURICH] = DeviceTarget.ZURICH,
96
+ _b[DeviceSource.ZURICHW] = DeviceTarget.ZURICH,
97
+ _b);
package/config/project.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  exports.__esModule = true;
3
- exports.TemplateCopyType = exports.AppSourceType = exports.AppType = void 0;
6
+ exports.loginStorageKey = exports.loginConfig = exports.LocalServerConfig = exports.TemplateCopyType = exports.AppSourceType = exports.AppType = void 0;
7
+ var lodash_1 = __importDefault(require("lodash"));
4
8
  var AppType;
5
9
  (function (AppType) {
6
10
  AppType["APP"] = "app";
@@ -16,3 +20,21 @@ var TemplateCopyType;
16
20
  TemplateCopyType["CLONE"] = "clone";
17
21
  TemplateCopyType["EDIT"] = "edit";
18
22
  })(TemplateCopyType = exports.TemplateCopyType || (exports.TemplateCopyType = {}));
23
+ var LocalServerConfig;
24
+ (function (LocalServerConfig) {
25
+ LocalServerConfig["HOSTNAME"] = "localhost";
26
+ LocalServerConfig[LocalServerConfig["PORT"] = 8086] = "PORT";
27
+ })(LocalServerConfig = exports.LocalServerConfig || (exports.LocalServerConfig = {}));
28
+ var loginURL = 'https://user.huami.com/universalLogin/index.html#/login';
29
+ var loginUrl = new URL(loginURL);
30
+ var accountPrefix = "____" + lodash_1["default"].replace(loginUrl.host, /\./g, '_') + "__";
31
+ exports.loginConfig = {
32
+ LOGIN_URL: loginURL,
33
+ PROJECT_NAME: 'zeppos_zeus_cli',
34
+ PLATFORM_APP: 'com.huami.watch.hmwatchmanager',
35
+ PROJECT_REDIRECT_URI: encodeURIComponent("http://" + LocalServerConfig.HOSTNAME + ":" + LocalServerConfig.PORT + "/")
36
+ };
37
+ exports.loginStorageKey = {
38
+ accountToken: accountPrefix + "token",
39
+ account: accountPrefix + "account"
40
+ };
package/modules/build.js CHANGED
@@ -69,23 +69,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
69
69
  return (mod && mod.__esModule) ? mod : { "default": mod };
70
70
  };
71
71
  exports.__esModule = true;
72
- exports.buildPreview = exports.buildDev = exports.build = exports.chooseBuildPackages = exports.BuildMode = void 0;
72
+ exports.buildPreview = exports.buildProd = exports.buildDev = exports.build = exports.chooseBuildPackages = exports.BuildMode = void 0;
73
73
  // @ts-ignore
74
74
  var node_js_1 = require("@zeppos/zpm/lib/node.js");
75
- var os_1 = __importDefault(require("os"));
76
75
  var fs_1 = __importDefault(require("fs"));
76
+ var rd = __importStar(require("rd"));
77
77
  var path = __importStar(require("path"));
78
78
  var lodash_1 = __importDefault(require("lodash"));
79
79
  var axios_1 = __importDefault(require("axios"));
80
80
  var url_1 = require("url");
81
81
  var fs_extra_1 = __importDefault(require("fs-extra"));
82
- var path_1 = require("path");
83
82
  var form_data_1 = __importDefault(require("form-data"));
84
83
  var qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
85
84
  var inquirer_1 = __importDefault(require("inquirer"));
86
85
  var login_1 = require("./login");
87
- var md5_1 = require("../utils/md5");
88
86
  var logger = __importStar(require("../utils/logger"));
87
+ var storage_1 = require("./storage");
88
+ var project_1 = require("../config/project");
89
89
  var STUDIO_URL = 'https://studio.huami.com';
90
90
  var BuildMode;
91
91
  (function (BuildMode) {
@@ -99,7 +99,7 @@ function chooseBuildPackages() {
99
99
  return __generator(this, function (_a) {
100
100
  switch (_a.label) {
101
101
  case 0:
102
- appJson = fs_extra_1["default"].readJSONSync((0, path_1.resolve)('./app.json'));
102
+ appJson = fs_extra_1["default"].readJSONSync(path.resolve('./app.json'));
103
103
  return [4 /*yield*/, inquirer_1["default"].prompt([
104
104
  {
105
105
  name: 'target',
@@ -120,19 +120,11 @@ var build = function (mode, packages) {
120
120
  if (mode === void 0) { mode = BuildMode.PROD; }
121
121
  if (packages === void 0) { packages = []; }
122
122
  return __awaiter(void 0, void 0, void 0, function () {
123
- var buildTempDir, choosedPackages, buildOptions, buildInfo, distPath;
123
+ var workspace, choosedPackages, buildOptions, buildInfo_1, DistDir_1, error_1;
124
124
  return __generator(this, function (_a) {
125
125
  switch (_a.label) {
126
126
  case 0:
127
- buildTempDir = '';
128
- try {
129
- buildTempDir = path.join(os_1["default"].tmpdir(), "zepp-" + (0, md5_1.md5)(path.resolve('./')));
130
- fs_extra_1["default"].copySync('./', buildTempDir);
131
- }
132
- catch (err) {
133
- logger.error('failed to copy project to temp dir');
134
- logger.log(err);
135
- }
127
+ workspace = path.resolve('./');
136
128
  if (!(mode === BuildMode.PROD)) return [3 /*break*/, 1];
137
129
  packages.length = 0;
138
130
  return [3 /*break*/, 3];
@@ -149,7 +141,7 @@ var build = function (mode, packages) {
149
141
  _a.label = 3;
150
142
  case 3:
151
143
  buildOptions = {
152
- path: buildTempDir,
144
+ path: workspace,
153
145
  targets: packages,
154
146
  buildMode: mode,
155
147
  jsc: '' // 不开启 js => c
@@ -157,16 +149,32 @@ var build = function (mode, packages) {
157
149
  if (mode === BuildMode.PROD || mode === BuildMode.PREVIEW) {
158
150
  buildOptions.png2vg = true;
159
151
  }
160
- return [4 /*yield*/, (0, node_js_1.start)(buildOptions)];
152
+ _a.label = 4;
161
153
  case 4:
162
- buildInfo = _a.sent();
163
- if (buildInfo) {
164
- distPath = path.join('./', 'dist');
165
- fs_extra_1["default"].emptyDirSync(distPath);
166
- fs_extra_1["default"].copySync(path.join(buildTempDir, 'dist'), distPath);
167
- fs_extra_1["default"].removeSync(buildTempDir);
154
+ _a.trys.push([4, 9, , 10]);
155
+ if (!(mode === BuildMode.DEV)) return [3 /*break*/, 6];
156
+ return [4 /*yield*/, (0, node_js_1.startWithoutDist)(buildOptions)];
157
+ case 5:
158
+ _a.sent();
159
+ return [2 /*return*/, (0, node_js_1.getZpkBuf)(packages[0])];
160
+ case 6: return [4 /*yield*/, (0, node_js_1.start)(buildOptions)];
161
+ case 7:
162
+ buildInfo_1 = _a.sent();
163
+ if (buildInfo_1) {
164
+ DistDir_1 = path.join(workspace, 'dist');
165
+ rd.eachFileSync(DistDir_1, function (file) {
166
+ if (file !== path.join(DistDir_1, buildInfo_1)) {
167
+ fs_extra_1["default"].removeSync(file);
168
+ }
169
+ });
168
170
  }
169
- return [2 /*return*/, buildInfo];
171
+ return [2 /*return*/, buildInfo_1];
172
+ case 8: return [3 /*break*/, 10];
173
+ case 9:
174
+ error_1 = _a.sent();
175
+ logger.error(error_1);
176
+ return [3 /*break*/, 10];
177
+ case 10: return [2 /*return*/];
170
178
  }
171
179
  });
172
180
  });
@@ -176,11 +184,29 @@ var buildDev = function (packages) {
176
184
  return (0, exports.build)(BuildMode.DEV, packages);
177
185
  };
178
186
  exports.buildDev = buildDev;
187
+ var buildProd = function (packages) {
188
+ return (0, exports.build)(BuildMode.PROD, packages);
189
+ };
190
+ exports.buildProd = buildProd;
191
+ var checkIsWatchFaceProject = function () {
192
+ var appJsonPath = path.resolve('./app.json');
193
+ var appJsonContent = fs_extra_1["default"].readJsonSync(appJsonPath);
194
+ var appType = lodash_1["default"].get(appJsonContent, 'app.appType');
195
+ return appType === project_1.AppType.WATCHFACE;
196
+ };
179
197
  var buildPreview = function (args) { return __awaiter(void 0, void 0, void 0, function () {
180
- var userToken, form, buildInfo;
198
+ var storage, isWatchFaceProject, userToken, form, buildInfo;
181
199
  return __generator(this, function (_a) {
182
200
  switch (_a.label) {
183
- case 0: return [4 /*yield*/, (0, login_1.login)(args)];
201
+ case 0:
202
+ storage = new storage_1.Storage({ cmd: lodash_1["default"].get(args, '$0') });
203
+ isWatchFaceProject = checkIsWatchFaceProject();
204
+ // TODO: preview 支持打包表盘
205
+ if (isWatchFaceProject) {
206
+ logger.info('coming soon');
207
+ return [2 /*return*/];
208
+ }
209
+ return [4 /*yield*/, (0, login_1.login)(args)];
184
210
  case 1:
185
211
  userToken = _a.sent();
186
212
  form = new form_data_1["default"]();
package/modules/config.js CHANGED
@@ -64,7 +64,7 @@ var chalk_1 = __importDefault(require("chalk"));
64
64
  var storage_1 = require("./storage");
65
65
  var logger = __importStar(require("../utils/logger"));
66
66
  var config = function (args) { return __awaiter(void 0, void 0, void 0, function () {
67
- var cmd, _a, space, _b, method, values, allowedMethods, storage, config_1;
67
+ var cmd, _a, space, _b, method, values, allowedMethods, storage, commonHandleNotKeyTips, config_1;
68
68
  return __generator(this, function (_c) {
69
69
  cmd = lodash_1["default"].get(args, '$0');
70
70
  _a = lodash_1["default"].get(args, '_', []), space = _a[0], _b = _a[1], method = _b === void 0 ? '' : _b, values = _a.slice(2);
@@ -79,26 +79,69 @@ var config = function (args) { return __awaiter(void 0, void 0, void 0, function
79
79
  process.exit(1);
80
80
  }
81
81
  storage = new storage_1.Storage({ cmd: lodash_1["default"].get(args, '$0') });
82
+ commonHandleNotKeyTips = function (method) {
83
+ logger.error("Please enter the data in the format: " + chalk_1["default"].yellow("zeus config " + method + " <key>"));
84
+ };
82
85
  switch (method) {
83
- case 'set':
86
+ case 'set': {
87
+ if (!values.length) {
88
+ logger.error("Please enter the data in the format: " + chalk_1["default"].yellow('zeus config set <key>=<value>'));
89
+ break;
90
+ }
84
91
  values.forEach(function (info) {
85
- var _a = info.split('='), key = _a[0], value = _a[1];
86
- storage.set(key, value);
87
- logger.info("config: " + key + "=" + value);
92
+ var _a = info.split('='), _b = _a[0], key = _b === void 0 ? '' : _b, _c = _a[1], value = _c === void 0 ? '' : _c;
93
+ key = key.trim();
94
+ value = value.trim();
95
+ if (!info.includes('=')) {
96
+ logger.error('Please enter the data in the format <key>=<value>');
97
+ }
98
+ else if (value === '') {
99
+ logger.error('please input <value>');
100
+ }
101
+ else if (key === '') {
102
+ logger.error('please input <key>');
103
+ }
104
+ else {
105
+ storage.set(key, value);
106
+ logger.success("config: " + key + "=" + value);
107
+ }
88
108
  });
89
109
  break;
90
- case 'get':
110
+ }
111
+ case 'get': {
112
+ if (!values.length) {
113
+ commonHandleNotKeyTips('get');
114
+ break;
115
+ }
91
116
  values.forEach(function (key) {
92
- logger.log(key + "=" + storage.get(key));
117
+ var curKey = key.trim();
118
+ if (!storage.has(key) || !key) {
119
+ logger.error('The <key> does not exist');
120
+ }
121
+ else {
122
+ logger.log(curKey + "=" + storage.get(curKey));
123
+ }
93
124
  });
94
125
  break;
95
- case 'delete':
126
+ }
127
+ case 'delete': {
128
+ if (!values.length) {
129
+ commonHandleNotKeyTips('delete');
130
+ break;
131
+ }
96
132
  values.forEach(function (key) {
97
- storage["delete"](key);
98
- logger.info("config: " + key + " deleted");
133
+ var curKey = key.trim();
134
+ if (!storage.has(key) || !key) {
135
+ logger.error('The <key> does not exist');
136
+ }
137
+ else {
138
+ storage["delete"](curKey);
139
+ logger.success("config: " + curKey + " deleted");
140
+ }
99
141
  });
100
142
  break;
101
- case 'list':
143
+ }
144
+ case 'list': {
102
145
  config_1 = storage.getAll();
103
146
  Object.keys(config_1).forEach(function (key) {
104
147
  if (lodash_1["default"].startsWith(key, '____')) {
@@ -114,6 +157,7 @@ var config = function (args) { return __awaiter(void 0, void 0, void 0, function
114
157
  });
115
158
  }
116
159
  break;
160
+ }
117
161
  default:
118
162
  break;
119
163
  }
@@ -97,7 +97,7 @@ var sleep_1 = require("../../utils/sleep");
97
97
  var yeoman_environment_1 = __importDefault(require("yeoman-environment"));
98
98
  var TEMPLATE_DIR = (0, path_1.resolve)(__dirname, '../../public/template');
99
99
  var create = function (args) { return __awaiter(void 0, void 0, void 0, function () {
100
- var _a, cmd, projectName, cwdPath, workDir, beforeFiles, localTemplates, localChoices, env, generagtorMate, generagtorMateKeys, answer, choosedPkg;
100
+ var _a, cmd, projectName, cwdPath, workDir, beforeFiles, localTemplates, localChoices, watchfaceTemplateChoices, appTemplateChoices, env, generagtorMate, generagtorMateKeys, answer, choosePkg;
101
101
  return __generator(this, function (_b) {
102
102
  switch (_b.label) {
103
103
  case 0:
@@ -125,6 +125,8 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
125
125
  }
126
126
  localTemplates = (0, fs_1.readdirSync)(TEMPLATE_DIR);
127
127
  localChoices = [];
128
+ watchfaceTemplateChoices = [];
129
+ appTemplateChoices = [];
128
130
  if (!lodash_1["default"].isEmpty(localTemplates)) {
129
131
  localTemplates.forEach(function (dirName) {
130
132
  var dirPath = TEMPLATE_DIR + "/" + dirName;
@@ -139,8 +141,20 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
139
141
  localChoices.unshift(Object.assign(chooseItem, {
140
142
  copyType: project_1.TemplateCopyType.EDIT
141
143
  }));
144
+ watchfaceTemplateChoices.unshift(Object.assign(chooseItem, {
145
+ copyType: project_1.TemplateCopyType.EDIT
146
+ }));
147
+ appTemplateChoices.unshift(Object.assign(chooseItem, {
148
+ copyType: project_1.TemplateCopyType.EDIT
149
+ }));
142
150
  }
143
151
  else {
152
+ if (dirName === 'hello-world') {
153
+ appTemplateChoices.push(chooseItem);
154
+ }
155
+ if (dirName === 'timer') {
156
+ watchfaceTemplateChoices.push(chooseItem);
157
+ }
144
158
  localChoices.push(chooseItem);
145
159
  }
146
160
  }
@@ -161,34 +175,58 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
161
175
  name: name,
162
176
  type: project_1.AppSourceType.YEOMAN
163
177
  });
178
+ appTemplateChoices.push({
179
+ name: name,
180
+ type: project_1.AppSourceType.YEOMAN
181
+ });
182
+ watchfaceTemplateChoices.push({
183
+ name: name,
184
+ type: project_1.AppSourceType.YEOMAN
185
+ });
164
186
  }
165
187
  });
166
188
  }
167
189
  localChoices.map(function (val, index) {
168
190
  val.value = index;
169
191
  });
192
+ appTemplateChoices.map(function (val, index) {
193
+ val.value = index;
194
+ });
195
+ watchfaceTemplateChoices.map(function (val, index) {
196
+ val.value = index;
197
+ });
170
198
  return [4 /*yield*/, inquirer_1["default"].prompt([
199
+ {
200
+ name: 'appType',
201
+ type: 'list',
202
+ message: 'What type of application do you want to create?',
203
+ choices: Object.keys(project_1.AppType)
204
+ },
171
205
  {
172
206
  name: 'template',
173
207
  type: 'list',
208
+ when: function (args) { return args.appType.toLowerCase() === project_1.AppType.APP; },
174
209
  message: 'Which template do you want to use?',
175
210
  choices: __spreadArray([
176
211
  new inquirer_1["default"].Separator(),
177
212
  new inquirer_1["default"].Separator('Choose a template')
178
- ], localChoices, true)
213
+ ], appTemplateChoices, true)
214
+ },
215
+ {
216
+ name: 'template',
217
+ type: 'list',
218
+ when: function (args) { return args.appType.toLowerCase() === project_1.AppType.WATCHFACE; },
219
+ message: 'Which template do you want to use?',
220
+ choices: __spreadArray([
221
+ new inquirer_1["default"].Separator(),
222
+ new inquirer_1["default"].Separator('Choose a template')
223
+ ], watchfaceTemplateChoices, true)
179
224
  },
180
- // {
181
- // name: 'appType',
182
- // type: 'list',
183
- // when: (args) => args.template === 0,
184
- // message: 'What type of application should be created?',
185
- // choices: Object.keys(AppType)
186
- // },
187
225
  {
188
226
  name: 'withAppSide',
189
227
  type: 'confirm',
190
228
  // when: (args) => !!args.appType,
191
- when: function (args) { return args.template === 0; },
229
+ when: function (args) { return args.template === 0 && args.appType.toLowerCase() === project_1.AppType.APP; },
192
230
  message: 'Should this application contain a app-side component?'
193
231
  },
194
232
  {
@@ -204,7 +242,8 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
204
242
  when: function (args) { return args.template === 0; },
205
243
  choices: Object.keys(device_1.deviceTargets).map(function (platform) { return ({
206
244
  name: device_1.deviceTargets[platform].deviceName,
207
- value: platform
245
+ value: platform,
246
+ checked: platform === Object.keys(device_1.deviceTargets)[0]
208
247
  }); }),
209
248
  "default": Object.keys(device_1.deviceTargets)[0],
210
249
  message: 'Which platforms of this application should be built?'
@@ -214,18 +253,18 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
214
253
  answer = _b.sent();
215
254
  answer.appType = answer.appType || project_1.AppType.APP;
216
255
  answer.workDir = workDir;
217
- choosedPkg = localChoices[answer.template];
256
+ choosePkg = answer.appType.toLowerCase() === project_1.AppType.APP ? appTemplateChoices[answer.template] : watchfaceTemplateChoices[answer.template];
218
257
  logger.info('fetching template...');
219
258
  return [4 /*yield*/, (0, sleep_1.sleep)(100)];
220
259
  case 2:
221
260
  _b.sent();
222
- if (choosedPkg.type === project_1.AppSourceType.YEOMAN) {
223
- logger.info(lodash_1["default"].upperFirst(cmd) + " application using yeoman template \"" + choosedPkg.name + "\".");
224
- (0, yeoman_app_1.createYeomanApp)(__assign(__assign({}, answer), { env: env, templateInfo: generagtorMate[choosedPkg.name] }));
261
+ if (choosePkg.type === project_1.AppSourceType.YEOMAN) {
262
+ logger.info(lodash_1["default"].upperFirst(cmd) + " application using yeoman template \"" + choosePkg.name + "\".");
263
+ (0, yeoman_app_1.createYeomanApp)(__assign(__assign({}, answer), { env: env, templateInfo: generagtorMate[choosePkg.name] }));
225
264
  }
226
265
  else {
227
- logger.info(lodash_1["default"].upperFirst(cmd) + " application using local template \"" + choosedPkg.name + "\".");
228
- (0, local_app_1.createLocalApp)(__assign(__assign({}, answer), { templateInfo: localChoices[answer.template] }));
266
+ logger.info(lodash_1["default"].upperFirst(cmd) + " application using local template \"" + choosePkg.name + "\".");
267
+ (0, local_app_1.createLocalApp)(__assign(__assign({}, answer), { templateInfo: choosePkg }));
229
268
  }
230
269
  logger.log('\n');
231
270
  return [4 /*yield*/, (0, sleep_1.sleep)(50)];
@@ -246,7 +285,7 @@ var create = function (args) { return __awaiter(void 0, void 0, void 0, function
246
285
  }
247
286
  });
248
287
  logger.log('\n');
249
- logger.success("project created successfully by \"" + choosedPkg.name + "\" template.\n");
288
+ logger.success("project created successfully by \"" + choosePkg.name + "\" template.\n");
250
289
  return [4 /*yield*/, (0, sleep_1.sleep)(300)];
251
290
  case 4:
252
291
  _b.sent();
@@ -57,18 +57,42 @@ var path_1 = require("path");
57
57
  var fs_extra_1 = __importDefault(require("fs-extra"));
58
58
  var project_1 = require("../../config/project");
59
59
  var device_1 = require("../../config/device");
60
+ // 生成模板项目
60
61
  var createLocalApp = function (args) { return __awaiter(void 0, void 0, void 0, function () {
61
- var workDir, templateInfo, withAppSide, withSettings, buildTargets, appJsonPath, appJson, defaultTarget, targets, defaultAssetsPath_1;
62
+ var workDir, templateInfo, withAppSide, withSettings, buildTargets, appType, appJsonPath, appJson, appID, defaultTarget, targets, defaultWatchFaceConfig, defaultAssetsPath_1;
62
63
  return __generator(this, function (_a) {
63
- workDir = args.workDir, templateInfo = args.templateInfo, withAppSide = args.withAppSide, withSettings = args.withSettings, buildTargets = args.buildTargets;
64
+ workDir = args.workDir, templateInfo = args.templateInfo, withAppSide = args.withAppSide, withSettings = args.withSettings, buildTargets = args.buildTargets, appType = args.appType;
64
65
  fs_extra_1["default"].copySync(templateInfo.path, workDir);
66
+ appJsonPath = (0, path_1.resolve)(workDir, './app.json');
67
+ appJson = fs_extra_1["default"].readJsonSync(appJsonPath);
68
+ appID = Math.floor(Math.random() * 10001) + 20000;
69
+ lodash_1["default"].set(appJson, 'app.appId', appID);
65
70
  if (templateInfo.copyType !== project_1.TemplateCopyType.EDIT) {
71
+ fs_extra_1["default"].writeJson(appJsonPath, appJson, {
72
+ spaces: 2,
73
+ EOL: os_1["default"].EOL
74
+ });
66
75
  return [2 /*return*/];
67
76
  }
68
- appJsonPath = (0, path_1.resolve)(workDir, './app.json');
69
- appJson = fs_extra_1["default"].readJsonSync(appJsonPath);
70
77
  defaultTarget = lodash_1["default"].get(appJson, 'targets.default');
71
78
  targets = {};
79
+ if (appType.toLowerCase() === project_1.AppType.WATCHFACE) {
80
+ defaultWatchFaceConfig = {
81
+ "path": "watchface/index",
82
+ "main": 1,
83
+ "editable": 0,
84
+ "lockscreen": 0,
85
+ "photoscreen": 0
86
+ };
87
+ lodash_1["default"].set(appJson, 'app.appType', project_1.AppType.WATCHFACE);
88
+ lodash_1["default"].set(appJson, 'app.description', 'empty watchface');
89
+ lodash_1["default"].unset(defaultTarget, 'module.page');
90
+ lodash_1["default"].set(defaultTarget, 'module.watchface', defaultWatchFaceConfig);
91
+ fs_extra_1["default"].remove((0, path_1.resolve)(workDir, './pages'));
92
+ }
93
+ else {
94
+ fs_extra_1["default"].remove((0, path_1.resolve)(workDir, './watchface'));
95
+ }
72
96
  if (!withAppSide) {
73
97
  lodash_1["default"].unset(defaultTarget, 'module.app-side');
74
98
  fs_extra_1["default"].remove((0, path_1.resolve)(workDir, './app-side'));
package/modules/help.js CHANGED
@@ -73,6 +73,7 @@ var help = function () { return __awaiter(void 0, void 0, void 0, function () {
73
73
  logger.log(cmd + " init init a new project in current directory");
74
74
  logger.log(cmd + " create <foo> add the <foo> project to current directory");
75
75
  logger.log(cmd + " login login to your account");
76
+ logger.log(cmd + " logout Sign out of your account");
76
77
  logger.log(cmd + " dev run this project in development mode");
77
78
  logger.log(cmd + " preview preview this project in your device");
78
79
  logger.log(cmd + " build build this project for production");
package/modules/login.js CHANGED
@@ -58,14 +58,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
58
58
  return (mod && mod.__esModule) ? mod : { "default": mod };
59
59
  };
60
60
  exports.__esModule = true;
61
- exports.login = void 0;
61
+ exports.logout = exports.login = void 0;
62
62
  var qs_1 = __importDefault(require("qs"));
63
- var url_1 = require("url");
64
63
  var lodash_1 = __importDefault(require("lodash"));
65
64
  var axios_1 = __importDefault(require("axios"));
66
65
  var inquirer_1 = __importDefault(require("inquirer"));
67
66
  var storage_1 = require("./storage");
68
67
  var logger = __importStar(require("../utils/logger"));
68
+ var project_1 = require("../config/project");
69
+ var open = require('open');
70
+ var http = require('http');
71
+ var url = require('url');
72
+ var querystring = require('querystring');
69
73
  var REGIST_URL = 'https://api-user.huami.com';
70
74
  var LOGIN_URL = 'https://account.huami.com';
71
75
  var postForm = function (url, data) {
@@ -118,23 +122,20 @@ var loginByLocal = function (account, password) { return __awaiter(void 0, void
118
122
  });
119
123
  }); };
120
124
  var login = function (args) { return __awaiter(void 0, void 0, void 0, function () {
121
- var loginUrl, storage, accountPrefix, accountTokenKey, accountKey, accountInfo, historyToken, answer, loginInfo, token;
125
+ var storage, accountInfo, historyToken, isLocal, answer, loginInfo, token_1, token;
122
126
  return __generator(this, function (_a) {
123
127
  switch (_a.label) {
124
128
  case 0:
125
- loginUrl = new url_1.URL(LOGIN_URL);
126
129
  storage = new storage_1.Storage({ cmd: lodash_1["default"].get(args, '$0') });
127
- accountPrefix = "____" + lodash_1["default"].replace(loginUrl.host, /\./g, '_') + "__";
128
- accountTokenKey = accountPrefix + "token";
129
- accountKey = accountPrefix + "account";
130
- accountInfo = storage.get(accountKey);
131
- if (!lodash_1["default"].get(args, 'relogin')) {
132
- historyToken = storage.get(accountTokenKey);
133
- if (historyToken) {
134
- logger.success("have logged in with account: " + accountInfo);
135
- return [2 /*return*/, historyToken];
136
- }
130
+ accountInfo = storage.get(project_1.loginStorageKey.account);
131
+ historyToken = storage.get(project_1.loginStorageKey.accountToken);
132
+ if (!lodash_1["default"].get(args, 'relogin') && historyToken) {
133
+ // logger.success(`have logged in with account: ${accountInfo}`)
134
+ logger.success("Has logged");
135
+ return [2 /*return*/, historyToken];
137
136
  }
137
+ isLocal = false;
138
+ if (!isLocal) return [3 /*break*/, 3];
138
139
  return [4 /*yield*/, inquirer_1["default"].prompt([
139
140
  {
140
141
  name: 'account',
@@ -157,14 +158,57 @@ var login = function (args) { return __awaiter(void 0, void 0, void 0, function
157
158
  })];
158
159
  case 2:
159
160
  loginInfo = _a.sent();
160
- token = lodash_1["default"].get(loginInfo, 'token_info.app_token');
161
- if (token) {
161
+ token_1 = lodash_1["default"].get(loginInfo, 'token_info.app_token');
162
+ if (token_1) {
162
163
  logger.success("logged in with account: " + answer.account);
163
- storage.set(accountKey, answer.account);
164
- storage.set(accountTokenKey, token);
164
+ storage.set(project_1.loginStorageKey.account, answer.account);
165
+ storage.set(project_1.loginStorageKey.accountToken, token_1);
165
166
  }
167
+ _a.label = 3;
168
+ case 3: return [4 /*yield*/, new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
169
+ var server;
170
+ return __generator(this, function (_a) {
171
+ switch (_a.label) {
172
+ case 0:
173
+ server = http.createServer(function (req, res) {
174
+ var arg = url.parse(req.url).query;
175
+ var params = querystring.parse(arg);
176
+ var appToken = params['apptoken'];
177
+ res.statusCode = 200;
178
+ res.setHeader('Content-Type', 'text/plain');
179
+ res.end('Login is successful, please return to the operation interface manually');
180
+ if (appToken) {
181
+ resolve(appToken);
182
+ storage.set(project_1.loginStorageKey.accountToken, appToken);
183
+ logger.success('logger success');
184
+ server.close();
185
+ // 在执行 preview 命令需要登录时不退出程序
186
+ if (!args) {
187
+ process.exit(1);
188
+ }
189
+ }
190
+ });
191
+ server.listen(project_1.LocalServerConfig.PORT, project_1.LocalServerConfig.HOSTNAME);
192
+ // 打开浏览器的登录页面
193
+ return [4 /*yield*/, open(project_1.loginConfig.LOGIN_URL + "?project_name=" + project_1.loginConfig.PROJECT_NAME + "&platform_app=" + project_1.loginConfig.PLATFORM_APP + "&project_redirect_uri=" + project_1.loginConfig.PROJECT_REDIRECT_URI)];
194
+ case 1:
195
+ // 打开浏览器的登录页面
196
+ _a.sent();
197
+ return [2 /*return*/];
198
+ }
199
+ });
200
+ }); })];
201
+ case 4:
202
+ token = _a.sent();
166
203
  return [2 /*return*/, token];
167
204
  }
168
205
  });
169
206
  }); };
170
207
  exports.login = login;
208
+ var logout = function () {
209
+ var storage = new storage_1.Storage({ cmd: '' });
210
+ storage["delete"](project_1.loginStorageKey.accountToken);
211
+ storage["delete"](project_1.loginStorageKey.account);
212
+ logger.success('Logged out');
213
+ };
214
+ exports.logout = logout;