@zeppos/zeus-cli 1.0.7 → 1.0.18

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 (79) hide show
  1. package/bin/cli.js +3 -0
  2. package/config/device.js +10 -2
  3. package/config/project.js +25 -1
  4. package/modules/build.js +55 -39
  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 +69 -19
  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.js +1 -1
  14. package/public/template/empty/app.json +1 -8
  15. package/public/template/empty/watchface/index.js +13 -0
  16. package/public/template/hello-world/app.js +1 -1
  17. package/public/template/hello-world/page/i18n/en-US.po +3 -0
  18. package/public/template/timer/app.js +10 -0
  19. package/public/template/timer/app.json +50 -0
  20. package/public/template/timer/assets/gtr-3-pro/images/bg/bg.png +0 -0
  21. package/public/template/timer/assets/gtr-3-pro/images/bigNum/0.png +0 -0
  22. package/public/template/timer/assets/gtr-3-pro/images/bigNum/1.png +0 -0
  23. package/public/template/timer/assets/gtr-3-pro/images/bigNum/2.png +0 -0
  24. package/public/template/timer/assets/gtr-3-pro/images/bigNum/3.png +0 -0
  25. package/public/template/timer/assets/gtr-3-pro/images/bigNum/4.png +0 -0
  26. package/public/template/timer/assets/gtr-3-pro/images/bigNum/5.png +0 -0
  27. package/public/template/timer/assets/gtr-3-pro/images/bigNum/6.png +0 -0
  28. package/public/template/timer/assets/gtr-3-pro/images/bigNum/7.png +0 -0
  29. package/public/template/timer/assets/gtr-3-pro/images/bigNum/8.png +0 -0
  30. package/public/template/timer/assets/gtr-3-pro/images/bigNum/9.png +0 -0
  31. package/public/template/timer/assets/gtr-3-pro/images/bigNum/sp.png +0 -0
  32. package/public/template/timer/assets/gtr-3-pro/images/btn/back.png +0 -0
  33. package/public/template/timer/assets/gtr-3-pro/images/btn/lv.png +0 -0
  34. package/public/template/timer/assets/gtr-3-pro/images/btn/red.png +0 -0
  35. package/public/template/timer/assets/gtr-3-pro/images/point/bg.png +0 -0
  36. package/public/template/timer/assets/gtr-3-pro/images/point/bottom.png +0 -0
  37. package/public/template/timer/assets/gtr-3-pro/images/point/center.png +0 -0
  38. package/public/template/timer/assets/gtr-3-pro/images/point/h.png +0 -0
  39. package/public/template/timer/assets/gtr-3-pro/images/point/left.png +0 -0
  40. package/public/template/timer/assets/gtr-3-pro/images/point/m.png +0 -0
  41. package/public/template/timer/assets/gtr-3-pro/images/point/right.png +0 -0
  42. package/public/template/timer/assets/gtr-3-pro/images/point/s.png +0 -0
  43. package/public/template/timer/assets/gtr-3-pro/images/preview.png +0 -0
  44. package/public/template/timer/assets/gtr-3-pro/images/second/second.png +0 -0
  45. package/public/template/timer/assets/gtr-3-pro/images/smallNum/0.png +0 -0
  46. package/public/template/timer/assets/gtr-3-pro/images/smallNum/1.png +0 -0
  47. package/public/template/timer/assets/gtr-3-pro/images/smallNum/2.png +0 -0
  48. package/public/template/timer/assets/gtr-3-pro/images/smallNum/3.png +0 -0
  49. package/public/template/timer/assets/gtr-3-pro/images/smallNum/4.png +0 -0
  50. package/public/template/timer/assets/gtr-3-pro/images/smallNum/5.png +0 -0
  51. package/public/template/timer/assets/gtr-3-pro/images/smallNum/6.png +0 -0
  52. package/public/template/timer/assets/gtr-3-pro/images/smallNum/7.png +0 -0
  53. package/public/template/timer/assets/gtr-3-pro/images/smallNum/8.png +0 -0
  54. package/public/template/timer/assets/gtr-3-pro/images/smallNum/9.png +0 -0
  55. package/public/template/timer/assets/gtr-3-pro/images/smallNum/d.png +0 -0
  56. package/public/template/timer/assets/gtr-3-pro/images/smallNum/n.png +0 -0
  57. package/public/template/timer/assets/gtr-3-pro/images/week_ch/1.png +0 -0
  58. package/public/template/timer/assets/gtr-3-pro/images/week_ch/2.png +0 -0
  59. package/public/template/timer/assets/gtr-3-pro/images/week_ch/3.png +0 -0
  60. package/public/template/timer/assets/gtr-3-pro/images/week_ch/4.png +0 -0
  61. package/public/template/timer/assets/gtr-3-pro/images/week_ch/5.png +0 -0
  62. package/public/template/timer/assets/gtr-3-pro/images/week_ch/6.png +0 -0
  63. package/public/template/timer/assets/gtr-3-pro/images/week_ch/7.png +0 -0
  64. package/public/template/timer/assets/gtr-3-pro/images/week_en/1.png +0 -0
  65. package/public/template/timer/assets/gtr-3-pro/images/week_en/2.png +0 -0
  66. package/public/template/timer/assets/gtr-3-pro/images/week_en/3.png +0 -0
  67. package/public/template/timer/assets/gtr-3-pro/images/week_en/4.png +0 -0
  68. package/public/template/timer/assets/gtr-3-pro/images/week_en/5.png +0 -0
  69. package/public/template/timer/assets/gtr-3-pro/images/week_en/6.png +0 -0
  70. package/public/template/timer/assets/gtr-3-pro/images/week_en/7.png +0 -0
  71. package/public/template/timer/shared/buffer.js +11 -0
  72. package/public/template/timer/shared/device-polyfill.js +3 -0
  73. package/public/template/timer/shared/global.js +17 -0
  74. package/public/template/timer/shared/js-module.js +27 -0
  75. package/public/template/timer/shared/logger.js +21 -0
  76. package/public/template/timer/shared/setTimeout.js +59 -0
  77. package/public/template/timer/watchface/gtr-3-pro/index.js +1 -0
  78. package/public/template/timer/watchface/round/index.js +438 -0
  79. package/public/template/hello-world/i18n/en-US.po +0 -2
package/bin/cli.js CHANGED
@@ -19,9 +19,12 @@ 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)
27
+ // @ts-ignore
25
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)
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,23 @@ 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
+ userid: accountPrefix + "userid",
41
+ cname: accountPrefix + "cname"
42
+ };
package/modules/build.js CHANGED
@@ -72,21 +72,19 @@ exports.__esModule = true;
72
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
- var url_1 = require("url");
81
80
  var fs_extra_1 = __importDefault(require("fs-extra"));
82
- var path_1 = require("path");
83
81
  var form_data_1 = __importDefault(require("form-data"));
84
82
  var qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
85
83
  var inquirer_1 = __importDefault(require("inquirer"));
86
84
  var login_1 = require("./login");
87
- var md5_1 = require("../utils/md5");
88
85
  var logger = __importStar(require("../utils/logger"));
89
- var STUDIO_URL = 'https://studio.huami.com';
86
+ var storage_1 = require("./storage");
87
+ var project_1 = require("../config/project");
90
88
  var BuildMode;
91
89
  (function (BuildMode) {
92
90
  BuildMode["DEV"] = "development";
@@ -99,7 +97,7 @@ function chooseBuildPackages() {
99
97
  return __generator(this, function (_a) {
100
98
  switch (_a.label) {
101
99
  case 0:
102
- appJson = fs_extra_1["default"].readJSONSync((0, path_1.resolve)('./app.json'));
100
+ appJson = fs_extra_1["default"].readJSONSync(path.resolve('./app.json'));
103
101
  return [4 /*yield*/, inquirer_1["default"].prompt([
104
102
  {
105
103
  name: 'target',
@@ -120,19 +118,11 @@ var build = function (mode, packages) {
120
118
  if (mode === void 0) { mode = BuildMode.PROD; }
121
119
  if (packages === void 0) { packages = []; }
122
120
  return __awaiter(void 0, void 0, void 0, function () {
123
- var buildTempDir, choosedPackages, buildOptions, buildInfo, distPath;
121
+ var workspace, choosedPackages, buildOptions, buildInfo_1, DistDir_1, error_1;
124
122
  return __generator(this, function (_a) {
125
123
  switch (_a.label) {
126
124
  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
- }
125
+ workspace = path.resolve('./');
136
126
  if (!(mode === BuildMode.PROD)) return [3 /*break*/, 1];
137
127
  packages.length = 0;
138
128
  return [3 /*break*/, 3];
@@ -149,7 +139,7 @@ var build = function (mode, packages) {
149
139
  _a.label = 3;
150
140
  case 3:
151
141
  buildOptions = {
152
- path: buildTempDir,
142
+ path: workspace,
153
143
  targets: packages,
154
144
  buildMode: mode,
155
145
  jsc: '' // 不开启 js => c
@@ -157,16 +147,32 @@ var build = function (mode, packages) {
157
147
  if (mode === BuildMode.PROD || mode === BuildMode.PREVIEW) {
158
148
  buildOptions.png2vg = true;
159
149
  }
160
- return [4 /*yield*/, (0, node_js_1.start)(buildOptions)];
150
+ _a.label = 4;
161
151
  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);
152
+ _a.trys.push([4, 9, , 10]);
153
+ if (!(mode === BuildMode.DEV)) return [3 /*break*/, 6];
154
+ return [4 /*yield*/, (0, node_js_1.startWithoutDist)(buildOptions)];
155
+ case 5:
156
+ _a.sent();
157
+ return [2 /*return*/, (0, node_js_1.getZpkBuf)(packages[0])];
158
+ case 6: return [4 /*yield*/, (0, node_js_1.start)(buildOptions)];
159
+ case 7:
160
+ buildInfo_1 = _a.sent();
161
+ if (buildInfo_1) {
162
+ DistDir_1 = path.join(workspace, 'dist');
163
+ rd.eachFileSync(DistDir_1, function (file) {
164
+ if (file !== path.join(DistDir_1, buildInfo_1)) {
165
+ fs_extra_1["default"].removeSync(file);
166
+ }
167
+ });
168
168
  }
169
- return [2 /*return*/, buildInfo];
169
+ return [2 /*return*/, buildInfo_1];
170
+ case 8: return [3 /*break*/, 10];
171
+ case 9:
172
+ error_1 = _a.sent();
173
+ logger.error(error_1);
174
+ return [3 /*break*/, 10];
175
+ case 10: return [2 /*return*/];
170
176
  }
171
177
  });
172
178
  });
@@ -180,22 +186,32 @@ var buildProd = function (packages) {
180
186
  return (0, exports.build)(BuildMode.PROD, packages);
181
187
  };
182
188
  exports.buildProd = buildProd;
189
+ var checkIsWatchFaceProject = function () {
190
+ var appJsonPath = path.resolve('./app.json');
191
+ var appJsonContent = fs_extra_1["default"].readJsonSync(appJsonPath);
192
+ var appType = lodash_1["default"].get(appJsonContent, 'app.appType');
193
+ return appType === project_1.AppType.WATCHFACE;
194
+ };
183
195
  var buildPreview = function (args) { return __awaiter(void 0, void 0, void 0, function () {
184
- var userToken, form, buildInfo;
185
- return __generator(this, function (_a) {
186
- switch (_a.label) {
187
- case 0: return [4 /*yield*/, (0, login_1.login)(args)];
196
+ var storage, isWatchFaceProject, _a, apptoken, userid, cname, form, buildInfo;
197
+ return __generator(this, function (_b) {
198
+ switch (_b.label) {
199
+ case 0:
200
+ storage = new storage_1.Storage({ cmd: lodash_1["default"].get(args, '$0') });
201
+ isWatchFaceProject = checkIsWatchFaceProject();
202
+ return [4 /*yield*/, (0, login_1.login)(args)];
188
203
  case 1:
189
- userToken = _a.sent();
204
+ _a = _b.sent(), apptoken = _a.apptoken, userid = _a.userid, cname = _a.cname;
190
205
  form = new form_data_1["default"]();
191
206
  logger.info('building preview...');
192
207
  return [4 /*yield*/, (0, exports.build)(BuildMode.PREVIEW)];
193
208
  case 2:
194
- buildInfo = _a.sent();
209
+ buildInfo = _b.sent();
195
210
  logger.info('getting preview package...');
196
- form.append('uploadFile', fs_1["default"].createReadStream("./dist/" + buildInfo));
211
+ form.append('file', fs_1["default"].createReadStream("./dist/" + buildInfo));
212
+ form.append('app_type', isWatchFaceProject ? '1' : '2');
197
213
  form.getLength(function (err, length) { return __awaiter(void 0, void 0, void 0, function () {
198
- var previewInfo, _a, prtcl, path, studioUrl;
214
+ var host, previewInfo, _a, protocol, code;
199
215
  return __generator(this, function (_b) {
200
216
  switch (_b.label) {
201
217
  case 0:
@@ -204,15 +220,15 @@ var buildPreview = function (args) { return __awaiter(void 0, void 0, void 0, fu
204
220
  return [2 /*return*/];
205
221
  }
206
222
  logger.info('generating preview qrcode...');
207
- return [4 /*yield*/, axios_1["default"].post(STUDIO_URL + "/upload/package/preview", form, {
208
- headers: __assign(__assign({}, form.getHeaders()), { 'content-length': "" + length, apptoken: userToken })
223
+ host = cname.split(',').filter(function (h) { return h.indexOf('api-mifit') > -1; })[0];
224
+ return [4 /*yield*/, axios_1["default"].post("https://" + host + "/custom/tools/app-dial/upload?userid=" + userid, form, {
225
+ headers: __assign(__assign({}, form.getHeaders()), { 'content-length': "" + length, apptoken: apptoken })
209
226
  })];
210
227
  case 1:
211
228
  previewInfo = _b.sent();
212
- _a = lodash_1["default"].get(previewInfo, 'data.data', {}), prtcl = _a.prtcl, path = _a.path;
213
- if (prtcl && path) {
214
- studioUrl = new url_1.URL(STUDIO_URL);
215
- qrcode_terminal_1["default"].generate(prtcl + "://" + studioUrl.host + path, { small: true });
229
+ _a = lodash_1["default"].get(previewInfo, 'data', {}), protocol = _a.protocol, code = _a.code;
230
+ if (protocol && code) {
231
+ qrcode_terminal_1["default"].generate(protocol + "://" + host + "/custom/tools/app-dial/download/" + code, { small: true });
216
232
  logger.success('please use Zepp APP to scan the qrcode below to preview your app.');
217
233
  }
218
234
  else {
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");