aiot-toolkit 1.0.20-importfile-dev.2 → 2.0.1-alpha.1

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 (54) hide show
  1. package/README.md +26 -192
  2. package/lib/bin.d.ts +2 -0
  3. package/lib/bin.js +229 -0
  4. package/lib/bin.js.map +1 -0
  5. package/lib/builder/IBuilder.d.ts +22 -0
  6. package/lib/builder/IBuilder.js +4 -0
  7. package/lib/builder/IBuilder.js.map +1 -0
  8. package/lib/builder/UxBuilder.d.ts +26 -0
  9. package/lib/builder/UxBuilder.js +102 -0
  10. package/lib/builder/UxBuilder.js.map +1 -0
  11. package/lib/builder/XtsBuilder.d.ts +15 -0
  12. package/lib/builder/XtsBuilder.js +65 -0
  13. package/lib/builder/XtsBuilder.js.map +1 -0
  14. package/lib/interface/CommandInterface.d.ts +15 -0
  15. package/lib/interface/CommandInterface.js +4 -0
  16. package/lib/interface/CommandInterface.js.map +1 -0
  17. package/lib/interface/VelaEmulatorInterface.d.ts +8 -0
  18. package/lib/interface/VelaEmulatorInterface.js +4 -0
  19. package/lib/interface/VelaEmulatorInterface.js.map +1 -0
  20. package/lib/utils/AdbUtils.d.ts +14 -0
  21. package/lib/utils/AdbUtils.js +103 -0
  22. package/lib/utils/AdbUtils.js.map +1 -0
  23. package/lib/utils/DeviceUtil.d.ts +62 -0
  24. package/lib/utils/DeviceUtil.js +366 -0
  25. package/lib/utils/DeviceUtil.js.map +1 -0
  26. package/lib/utils/RequestUtils.d.ts +11 -0
  27. package/lib/utils/RequestUtils.js +90 -0
  28. package/lib/utils/RequestUtils.js.map +1 -0
  29. package/lib/utils/VelaAvdUtils.d.ts +39 -0
  30. package/lib/utils/VelaAvdUtils.js +308 -0
  31. package/lib/utils/VelaAvdUtils.js.map +1 -0
  32. package/lib/waiter.d.ts +3 -0
  33. package/lib/waiter.js +39 -0
  34. package/lib/waiter.js.map +1 -0
  35. package/package.json +33 -47
  36. package/CHANGELOG.md +0 -353
  37. package/bin/index.js +0 -495
  38. package/gen-webpack-conf/get-devtool.js +0 -51
  39. package/gen-webpack-conf/helpers.js +0 -143
  40. package/gen-webpack-conf/index.js +0 -436
  41. package/gen-webpack-conf/manifest-schema.js +0 -284
  42. package/gen-webpack-conf/validate.js +0 -284
  43. package/lib/commands/compile.js +0 -2
  44. package/lib/commands/debug.js +0 -2
  45. package/lib/commands/init.js +0 -2
  46. package/lib/commands/packages.js +0 -2
  47. package/lib/commands/preview.js +0 -2
  48. package/lib/commands/report.js +0 -2
  49. package/lib/commands/resign.js +0 -2
  50. package/lib/commands/update.js +0 -2
  51. package/lib/commands/utils.js +0 -2
  52. package/lib/index.js +0 -2
  53. package/lib/plugins/manifest-watch-plugin.js +0 -2
  54. package/lib/utils.js +0 -2
@@ -1,284 +0,0 @@
1
- module.exports = {
2
- type: 'object',
3
- required: ['package', 'name', 'icon', 'versionCode', 'config', 'router'],
4
- properties: {
5
- package: {
6
- type: 'string',
7
- errorMessage: ' The field must be string type'
8
- },
9
- name: {
10
- // TODO 6个汉字以内
11
- type: 'string',
12
- errorMessage: ' The field must be string type'
13
- },
14
- icon: {
15
- type: 'string',
16
- errorMessage: ' The field must be string type'
17
- },
18
- banner: {
19
- type: 'string',
20
- errorMessage: ' The field must be string type'
21
- },
22
- versionName: {
23
- type: 'string',
24
- errorMessage: ' The field must be string type'
25
- },
26
- versionCode: {
27
- type: ['number'],
28
- errorMessage: ' The field must be Integer type'
29
- },
30
- minPlatformVersion: {
31
- type: ['number'],
32
- errorMessage: ' The field must be Integer type'
33
- },
34
- features: {
35
- type: 'array',
36
- items: {
37
- type: 'object',
38
- properties: {
39
- name: {
40
- type: 'string',
41
- errorMessage: ' The field must be string type'
42
- }
43
- },
44
- errorMessage: {
45
- type: " The field type must be 'object'"
46
- }
47
- },
48
- errorMessage: ' The field must be array type'
49
- },
50
- config: {
51
- type: 'object',
52
- properties: {
53
- logLevel: {
54
- enum: ['off', 'error', 'warn', 'info', 'log', 'debug'],
55
- errorMessage: ' The field can only be off, error, warn, info, log, debug'
56
- },
57
- designWidth: {
58
- type: ['number', 'string'],
59
- errorMessage: ' The field must be number type'
60
- },
61
- data: {
62
- // TODO 全局数据对象,属性名不能以$或_开头,
63
- type: 'object',
64
- errorMessage: ' The field must be object type'
65
- },
66
- background: {
67
- // TODO 更详细的后台运行配置信息,
68
- type: 'object',
69
- errorMessage: ' The field must be object type'
70
- },
71
- network: {
72
- // TODO 更详细的网络配置信息,
73
- type: 'object',
74
- errorMessage: ' The field must be object type'
75
- }
76
- },
77
- errorMessage: {
78
- type: " The field type must be'object'"
79
- }
80
- },
81
- router: {
82
- // TODO 更详细的后台运行配置信息,
83
- type: 'object',
84
- required: ['entry', 'pages'],
85
- properties: {
86
- entry: {
87
- type: 'string',
88
- errorMessage: ' The field must be string type'
89
- },
90
- // TODO 看下 key 不确定能否校验值,
91
- pages: {
92
- type: 'object',
93
- errorMessage: ' The field must be object type'
94
- },
95
- errorPage: {
96
- type: 'string',
97
- errorMessage: ' The field must be string type'
98
- },
99
- // TODO 看下 key 不确定能否校验值,
100
- widgets: {
101
- type: 'object',
102
- errorMessage: ' The field must be object type'
103
- }
104
- },
105
- errorMessage: ' The field must be object type'
106
- },
107
- display: {
108
- type: 'object',
109
- properties: {
110
- backgroundColor: {
111
- // TODO HEXColor
112
- type: 'string',
113
- errorMessage: ' The field must be string type'
114
- },
115
- fullScreen: {
116
- type: 'boolean',
117
- errorMessage: ' The field must be boolean type'
118
- },
119
- titleBar: {
120
- type: 'boolean',
121
- errorMessage: ' The field must be boolean type'
122
- },
123
- titleBarBackgroundColor: {
124
- // TODO HEXColor
125
- type: 'string',
126
- errorMessage: ' The field must be string type'
127
- },
128
- titleBarTextColor: {
129
- // TODO HEXColor
130
- type: 'string',
131
- errorMessage: ' The field must be string type'
132
- },
133
- menu: {
134
- type: 'boolean',
135
- errorMessage: ' The field must be boolean type'
136
- },
137
- windowSoftInputMode: {
138
- enum: ['adjustPan', 'adjustResize'],
139
- errorMessage: ' The field can only be adjustPan or adjustResize'
140
- },
141
- pages: {
142
- type: 'object',
143
- errorMessage: {
144
- type: "The field type must be 'object'"
145
- }
146
- },
147
- orientation: {
148
- enum: ['portrait', 'landscape'],
149
- errorMessage: ' The field can only be portrait or landscape'
150
- },
151
- statusBarImmersive: {
152
- type: 'boolean',
153
- errorMessage: ' The field must be boolean type'
154
- },
155
- statusBarTextStyle: {
156
- enum: ['light', 'dark', 'auto'],
157
- errorMessage: ' The field can only be light, dark or auto'
158
- },
159
- statusBarBackgroundColor: {
160
- type: 'string',
161
- errorMessage: ' The field must be string type'
162
- },
163
- statusBarBackgroundOpacity: {
164
- type: 'number',
165
- errorMessage: ' The field must be number type'
166
- },
167
- fitCutout: {
168
- enum: ['none', 'portrait', 'landscape'],
169
- errorMessage: ' The field can only be none portrait, landscape'
170
- },
171
- textSizeAdjust: {
172
- enum: ['none', 'auto'],
173
- errorMessage: ' The field can only be none or auto'
174
- },
175
- themeMode: {
176
- enum: [-1, 0, 1],
177
- errorMessage: ' The field can only be -1, 0 or 1'
178
- },
179
- menuBarData: {
180
- // TODO 详细校验
181
- type: 'object',
182
- errorMessage: ' The field must be object type'
183
- },
184
- forceDark: {
185
- type: 'boolean',
186
- errorMessage: ' The field must be boolean type'
187
- },
188
- pageCache: {
189
- type: 'boolean',
190
- errorMessage: ' The field must be boolean type'
191
- },
192
- cacheDuration: {
193
- type: 'number',
194
- errorMessage: ' The field must be number type'
195
- }
196
- },
197
- errorMessage: {
198
- type: "The field type must be 'object'"
199
- }
200
- },
201
- subpackages: {
202
- // TODO 与后面的分包校验融合
203
- type: 'array',
204
- items: {
205
- type: 'object',
206
- properties: {
207
- name: {
208
- type: 'string',
209
- errorMessage: ' The field must be string type'
210
- },
211
- // TODO 详细的规则校验
212
- resource: {
213
- type: 'string',
214
- errorMessage: ' The field must be string type'
215
- }
216
- },
217
- // 是否必须?
218
- required: ['name', 'resource'],
219
- errorMessage: {
220
- type: 'tabBar.list[n] must be string type',
221
- required: ' Must contain name and resource fields'
222
- }
223
- },
224
- errorMessage: {
225
- type: ' The field must be an array of length 2 to 5'
226
- }
227
- },
228
- menuBarData: {
229
- type: 'object',
230
- properties: {
231
- menuBar: {
232
- type: 'boolean',
233
- errorMessage: ' The field must be boolean type'
234
- },
235
- menuBarStyle: {
236
- enum: ['dark', 'light'],
237
- errorMessage: ' The field can only be adjustPan or adjustResize'
238
- },
239
- shareTitle: {
240
- type: 'string',
241
- errorMessage: ' The field must be string type'
242
- },
243
- shareDescription: {
244
- type: 'string',
245
- errorMessage: ' The field must be string type'
246
- },
247
- shareIcon: {
248
- type: 'string',
249
- errorMessage: ' The field must be string type'
250
- },
251
- shareCurrentPage: {
252
- type: 'string',
253
- errorMessage: ' The field must be string type'
254
- },
255
- shareParams: {
256
- type: 'string',
257
- errorMessage: ' The field must be string type'
258
- },
259
- shareUrl: {
260
- type: 'string',
261
- errorMessage: ' The field must be string type'
262
- }
263
- },
264
- errorMessage: {
265
- type: " The field type must be 'object'"
266
- }
267
- },
268
- deviceTypeList: {
269
- type: 'array',
270
- items: {
271
- type: 'string',
272
- errorMessage: {
273
- type: " The field type must be'string'"
274
- }
275
- },
276
- errorMessage: 'The field must be array type'
277
- }
278
- },
279
- errorMessage: {
280
- type: ' Type must be object',
281
- required:
282
- "Must contain 'package'、'name'、'versionName'、'versionCode'、'minPlatformVersion'、'icon'、'pages' fields"
283
- }
284
- }
@@ -1,284 +0,0 @@
1
- const fs = require('fs')
2
- const path = require('path')
3
- const Ajv = require('ajv')
4
- const AjvErrors = require('ajv-errors')
5
- const manifestSchema = require('./manifest-schema')
6
- const { colorconsole, KnownError } = require('@aiot-toolkit/shared-utils')
7
- const { compileOptionsMeta } = require('@aiot-toolkit/shared-utils/compilation-config')
8
- const { getSkeletonConfig } = require('@aiot-toolkit/packager/lib/common/info')
9
-
10
- // 主包保留名
11
- const MAIN_PKG_NAME = compileOptionsMeta.MAIN_PKG_NAME
12
- // 能使用rpks能力的调试器最低版本
13
- const RPKS_SUPPORT_VERSION_FROM = 1040
14
-
15
- /**
16
- * 验证项目配置正确
17
- */
18
- exports.validateProject = function validateProject(manifestFile, sourceRoot) {
19
- if (!fs.existsSync(manifestFile)) {
20
- colorconsole.throw(
21
- `Please confirm the existence of manifest.json file ${manifestFile} under project %projectDir%/${sourceRoot}/`
22
- )
23
- throw new KnownError(`Could not find ${sourceRoot}/manifest.json`)
24
- }
25
- }
26
-
27
- const docSrc = 'https://doc.quickapp.cn/framework/manifest.html'
28
- /**
29
- * 校验 app/page/component.json
30
- *
31
- * @param {AppInfo} jsonInfo - json 文件内容
32
- * @param {AppInfo} filePath - json 文件地址
33
- * @return {Array<Error>} error 数组
34
- */
35
- function validateJson(jsonInfo, filePath) {
36
- const ajv = new Ajv({ allErrors: true, jsonPointers: true })
37
- AjvErrors(ajv)
38
- ajv.validate(manifestSchema, jsonInfo)
39
- if (!ajv.errors) {
40
- return []
41
- }
42
-
43
- const errors = ajv.errors.map(error => {
44
- const message =
45
- `Check error ${filePath} \n` +
46
- error.dataPath
47
- .split('/')
48
- .filter(Boolean)
49
- .join('.') +
50
- error.message +
51
- `\nrefer to: ${docSrc}`
52
- return new Error(message)
53
- })
54
-
55
- return errors
56
- }
57
- exports.validateJson = validateJson
58
-
59
- /**
60
- * 验证项目的应用全局配置
61
- * @param {String} src - 项目src
62
- * @param {Object} manifest - manifest 对象
63
- * @param {Object} options - compileOptionsObject
64
- */
65
- exports.validateManifest = function validateManifest(src, manifest, options) {
66
- const errors = validateJson(manifest, 'manifest.json')
67
- errors.forEach(error => {
68
- colorconsole.error(error.message)
69
- })
70
- const { subpackages } = manifest
71
- // 验证分包规则
72
- if (!options.disableSubpackages && subpackages && subpackages.length > 0) {
73
- validateManifestSubpackages(src, subpackages)
74
- }
75
- }
76
-
77
- /**
78
- * 检查subpackages字段配置。
79
- * 除subpackages字段指定的文件是打进非主包外,剩余文件都打进主包
80
- * 主包与是独立包的非主包,都需要manifest文件
81
- * @param {object[]} subpackages 分包列表: [{ name, resource, standalone, icon }]
82
- * @param {string} subpackages[].name 分包名字,必填,不能重复,且不能是"base"(这是主包保留名),只能是 数字字母_ 组成
83
- * @param {string} subpackages[].resource 分包资源路径,必须为src下文件目录,不能重复,分包间不能有包含关系,只能是 数字字母_ 开头,数字字母_-/ 组成
84
- * @param {boolean} subpackages[].standalone 是否独立包标识,是独立包则需要manifest文件,缺省为false;
85
- * @param {boolean} subpackages[].icon 分包icon,是独立包则需要icon,缺省则为应用的icon;
86
- */
87
- function validateManifestSubpackages(src, subpackages) {
88
- // 分包名的校验规则
89
- const nameReg = /^\w+$/
90
- // 资源名的校验规则
91
- const resourceReg = /^\w[\w-/]*$/
92
- // 用以检测分包名是否重复
93
- const nameList = []
94
- // 用以检测分包资源路径是否重复
95
- const resList = []
96
- // i18n文件目录地址,不能作为分包
97
- const i18nPath = path.join(src, 'i18n')
98
- // lottie文件目录地址,不能作为分包
99
- const lottiePath = path.join(src, 'lottie')
100
- // 骨架屏文件目录地址,不能作为分包
101
- const skeletonPath = path.join(src, 'skeleton')
102
- let name = ''
103
- let resource = ''
104
-
105
- // 资源路径的具体文件路径
106
- let resPath = ''
107
- let index = 0
108
-
109
- /**
110
- * 检查当前资源路径与已校验过的资源路径是否有包含关系。
111
- *
112
- * @param {string} resource - 当前要校验的资源
113
- * @param {number} index - 当前要校验资源的序号
114
- * @return {boolean} true/false - 存在/不存在
115
- */
116
- function checkPathInclusion(resource, currentIndex) {
117
- for (let i = 0, l = resList.length; i < l; i++) {
118
- const _res = resList[i]
119
- if (resource.startsWith(_res) || _res.startsWith(resource)) {
120
- colorconsole.throw(
121
- `The resource '${resource}' of the ${currentIndex}th subcontracting and the resource '${_res}' of the ${i +
122
- 1}th subcontracting have an inclusive relationship, please modify`
123
- )
124
- return true
125
- }
126
- }
127
- return false
128
- }
129
-
130
- subpackages.forEach((subpkg, i) => {
131
- name = subpkg.name
132
- resource = subpkg.resource
133
- resPath = resource && path.join(src, resource)
134
- index = i + 1
135
-
136
- if (!name) {
137
- colorconsole.throw(`The name of the ${index}th subpackage cannot be empty, please add it`)
138
- } else if (!nameReg.test(name)) {
139
- colorconsole.throw(
140
- `The name '${name}' of the ${index}th subpackage is illegal, it can only be composed of letters and underscores, please modify it`
141
- )
142
- } else if (name === MAIN_PKG_NAME) {
143
- colorconsole.throw(
144
- `The name '${name}' of the ${index}th subpackage is the reserved name of the main package, please modify it`
145
- )
146
- } else if (nameList.indexOf(name) > -1) {
147
- colorconsole.throw(
148
- `The name '${name}' of the ${index}th subpackage already exists, please modify it`
149
- )
150
- } else {
151
- nameList.push(name)
152
- }
153
-
154
- if (!resource) {
155
- colorconsole.throw(
156
- `The resource name of the ${index}th subpackage cannot be empty, please add it`
157
- )
158
- } else if (!resourceReg.test(resource)) {
159
- colorconsole.throw(
160
- `The resource name '${resource}' of the ${index}th subpackage is illegal, it can only start with 'numbers'、'letters'、'_' and composed of 'numbers letters _-/', please modify it`
161
- )
162
- } else if (resList.indexOf(resource) > -1) {
163
- colorconsole.throw(
164
- `Resource '${resource}' of the ${index}th subpackage has been used, please modify it`
165
- )
166
- } else if (!fs.existsSync(resPath)) {
167
- colorconsole.throw(
168
- `Resource '${resource}' of the ${index}th subpackage, file directory '${resPath}' does not exist, please modify it`
169
- )
170
- } else if (resPath === i18nPath) {
171
- colorconsole.throw(
172
- `Resource '${resource}' of the ${index}th subpackage, file directory is '${resPath}',the i18n file directory cannot be used as subpackage, please modify it`
173
- )
174
- } else if (resPath === lottiePath) {
175
- colorconsole.throw(
176
- `Resource '${resource}' of the ${index}th subpackage, file directory is '${resPath}', the lottie file directory cannot be used as a subpackage, please modify it`
177
- )
178
- } else if (resPath === skeletonPath) {
179
- colorconsole.throw(
180
- `Resource '${resource}' of the ${index}th subpackage, file directory is '${resPath}',the skeleton screen file directory cannot be used as a subpackage, please modify it`
181
- )
182
- } else if (!checkPathInclusion(resource, index)) {
183
- resList.push(resource)
184
- }
185
-
186
- if (subpkg.standalone && subpkg.icon && !fs.existsSync(path.join(src, subpkg.icon))) {
187
- colorconsole.throw(
188
- `The icon of the ${index}th subpackage's configuration does not exist, please modify it`
189
- )
190
- }
191
-
192
- if (subpkg.standalone && subpkg.banner && !fs.existsSync(path.join(src, subpkg.banner))) {
193
- colorconsole.throw(
194
- `The banner of the ${index}th subpackage's configuration does not exist, please modify it`
195
- )
196
- }
197
- })
198
- colorconsole.warn(
199
- `The project has configured subpackage. If you want to use the subpackage function, please ensure that the platform version >= ${RPKS_SUPPORT_VERSION_FROM}`
200
- )
201
- }
202
-
203
- /**
204
- * sitemap校验。
205
- * @param {String} src - 项目src路径
206
- * @param {Object} manifest - manifest内容
207
- */
208
- exports.valiedateSitemap = function valiedateSitemap(src, manifest) {
209
- const sitemap = path.join(src, 'sitemap.json')
210
- if (fs.existsSync(sitemap)) {
211
- const rules = require(sitemap).rules
212
- const pages = Object.keys(manifest.router.pages || {})
213
- rules.forEach((i, idx) => {
214
- const page = i.page
215
- if (page !== '*' && !pages.includes(page)) {
216
- colorconsole.throw(
217
- `The ${idx +
218
- 1}th item of sitemap rules is configured incorrectly, the page ${page} does not exist`
219
- )
220
- }
221
- return page
222
- })
223
- }
224
- }
225
-
226
- /**
227
- * 骨架屏文件校验。
228
- * @param {String} src - 项目src路径packages/hap-toolkit/gen-webpack-conf/validate.js
229
- * @param {Object} manifest - manifest内容
230
- */
231
- exports.valiedateSkeleton = function valiedateSkeleton(src, manifest) {
232
- const configJson = getSkeletonConfig(src)
233
- const manifestPages = manifest.router.pages || {}
234
-
235
- if (configJson) {
236
- const pageDir = path.join(src, 'skeleton/page')
237
- const singleMap = configJson.singleMap || {}
238
- const anchorMaps = configJson.anchorMaps || []
239
-
240
- Object.keys(singleMap).forEach(page => {
241
- if (!manifestPages[page]) {
242
- colorconsole.throw(
243
- `The configuration page ${page} of the skeleton screen singleMapd is not defined in the manifest, please check`
244
- )
245
- }
246
- const file = path.join(pageDir, configJson.singleMap[page])
247
- if (!fs.existsSync(file)) {
248
- colorconsole.throw(
249
- `The sk file ${file} in the configuration page ${page} of the skeleton screen singleMapd does not exist, please check`
250
- )
251
- }
252
- })
253
-
254
- if (!Array.isArray(anchorMaps)) {
255
- colorconsole.throw(
256
- `The value of the anchorMaps field of the skeleton screen must be an array, please check`
257
- )
258
- }
259
- anchorMaps.forEach((mapJson, index) => {
260
- const { page, skeletonMap } = mapJson
261
- if (!page) {
262
- colorconsole.throw(
263
- `The page value of the ${index +
264
- 1}th configuration of the skeleton screen anchorMaps cannot be empty, please check`
265
- )
266
- }
267
- if (!manifestPages[page]) {
268
- colorconsole.throw(
269
- `The page value ${page} of the ${index +
270
- 1}th configuration of the skeleton screen anchorMaps is not defined in the manifest, please check`
271
- )
272
- }
273
- Object.keys(skeletonMap || {}).forEach(anchor => {
274
- const file = path.join(pageDir, skeletonMap[anchor])
275
- if (!fs.existsSync(file)) {
276
- colorconsole.throw(
277
- `The sk file ${file} of skeleton screen anchorMap's ${index +
278
- 1}th configuration anchor does not exist, please check`
279
- )
280
- }
281
- })
282
- })
283
- }
284
- }
@@ -1,2 +0,0 @@
1
- "use strict";const webpack=require("webpack"),{setCustomConfig:setCustomConfig,colorconsole:colorconsole}=require("@aiot-toolkit/shared-utils"),genWebpackConf=require("../../gen-webpack-conf"),{summaryErrors:summaryErrors,summaryWarnings:summaryWarnings}=require("./utils");let watching=null;function showVersion(){const o=require("../../package.json").version,r=require("@babel/core/package.json").version,e=require("webpack/package.json").version;colorconsole.info(`aiot-toolkit: ${o}; babel: ${r}; webpack: ${e};`)}showVersion(),module.exports.compile=function(o,r,e,s={}){const n=s.onerror;return new Promise(((c,t)=>{function a(o,r){if(o&&(n&&n(o),colorconsole.error(o)),r){if(r.hasErrors()||r.hasWarnings()){const o=summaryErrors(r),e=summaryWarnings(r);n&&n(o),colorconsole.error(o),colorconsole.warn(e)}r.hasErrors()&&(process.exitCode=1)}}colorconsole.attach(s.log),setCustomConfig(s.cwd),process.env.NODE_PLATFORM=o,process.env.NODE_PHASE=r;const i="prod"===r?"production":"development";try{const o=genWebpackConf(s,i);if(e){const r=webpack(o);watching=r.watch({aggregateTimeout:300},((o,r)=>{a(o,r),c({compileError:o,stats:r,watching:watching})}))}else webpack(o,((o,r)=>{a(o,r),c({compileError:o,stats:r})}))}catch(o){t(o)}}))},module.exports.stopWatch=function(){return new Promise((o=>{watching?watching.close((()=>{watching=null,o({stopWatchError:null})})):o({stopWatchError:"no watching"})}))};
2
- //# sourceMappingURL=compile.js.map
@@ -1,2 +0,0 @@
1
- "use strict";function ownKeys(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,t)}return o}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(o),!0).forEach((function(r){_defineProperty(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function _defineProperty(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}const path=require("path"),fs=require("fs"),chalk=require("chalk"),inquirer=require("inquirer"),adbCommander=require("adb-commander"),{launchServer:launchServer}=require("@aiot-toolkit/server"),{compile:compile}=require("./compile"),{colorconsole:colorconsole}=require("@aiot-toolkit/shared-utils"),{downloadFile:downloadFile,getQuickappDebuggerUrl:getQuickappDebuggerUrl,getQuickappPreviewUrl:getQuickappPreviewUrl,sendReq:sendReq,getClients:getClients,checkQuickappDir:checkQuickappDir,getCardContent:getCardContent}=require("./utils"),{recordClient:recordClient,clearProjectRecord:clearProjectRecord}=require("@aiot-toolkit/shared-utils/lib/record-client"),{clientRecordPath:clientRecordPath}=require("@aiot-toolkit/shared-utils/config"),ipRegExp=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,CLIENT_PORT=39517;async function connectDevice(e=""){try{const r="Yes, connect a new wifi device";if(!e){if((await inquirer.prompt([{name:"type",type:"list",message:"(USB devices will automatically connect) Choose whether to connect to a new wifi device, and fill in its IP address later:",choices:[r,"Skip, keep connected device"]}])).type!==r)return Promise.resolve();e=(await inquirer.prompt([{name:"ip",message:'Please enter the IP address of the device under wifi(eg:192.168.1.1),make sure that the computer and the device are under the same wifi。If you need to enter multiple IPs, please separate them with ",":',default:null}])).ip}if(0===e.length)return colorconsole.info("Since no ip address is entered, the connected device will be connected"),Promise.resolve();const o=e.trim().split(","),t=o.filter((e=>!ipRegExp.test(e)));if(!t||!t.length){const e=Array.from(o,(e=>adbCommander.exeCommand(`adb connect ${e}:5555`).then((({result:r,err:o})=>((o||r.indexOf("failed")>=0)&&(colorconsole.error(`wifi connection ip: The device with ip of "${e}" failed`),process.exit()),colorconsole.info(`wifi connection ip: The device with ip of "${e}" succeeded`),recordClient(clientRecordPath,{ip:e,port:39517}),Promise.resolve())))));return Promise.all(e).then((()=>(colorconsole.log("All new WIFI devices are connected"),Promise.resolve()))).catch((()=>{process.exit()}))}t.map((e=>{colorconsole.error(`ip: ${e} is invalid IP`)})),process.exit()}catch(e){return Promise.reject(new Error(`Error connecting to the device, error message:${e.message}`))}}async function getConnectDevices(e=!0){try{return adbCommander.deviceList().then((({deviceList:r,err:o})=>{if(o){const e="Error getting connection information of adb device";colorconsole.throw(e,o)}if(r.length>0)return e&&colorconsole.info(`Devices connected via adb: ${chalk.yellow(r.join(", "))}.`),Promise.resolve(r);{const e="No device is currently connected, please check the following preparations in turn:\n 1. Whether the device is started;\n 2. Whether in the same LAN WI-FI;\n 3. Whether the device can be connected to the computer via USB;";colorconsole.throw(e)}}))}catch(e){return Promise.reject(new Error(e.message))}}async function downloadApk(e,r){let o="";const{apkVersion:t}=e;o=r?getQuickappDebuggerUrl(t):getQuickappPreviewUrl(t);const n=path.basename(o),i=path.join(__dirname,"./apk/",n);return fs.existsSync(i)?(colorconsole.log("The installation package has been downloaded, now use the cache file to install"),i):downloadFile(o,n).then((e=>(colorconsole.info(e),i))).catch((e=>{colorconsole.error("Failed to download the installation package",e),process.exit()}))}async function installApk(e,r=[],o,t,n){const{forceInstall:i=!1}=e;try{const e=Array.from(r,(e=>adbCommander.isInstalled(e,t).then((async({isInstalled:r,err:c})=>(c&&colorconsole.error(`Failed to install application "${chalk.yellow(n)}" on "${chalk.yellow(e)}" device, error message:${JSON.stringify(c)} `),!1===r||i?(await adbCommander.uninstall(e,t),colorconsole.log(`Start to install application "${chalk.yellow(n)}" on device "${chalk.yellow(e)}" : `),adbCommander.install(e,o).then((({result:r,err:o})=>o?(colorconsole.error(`Failed to install application "${chalk.yellow(n)}" on device "${chalk.yellow(e)}", please troubleshoot and try again `),Promise.reject(new Error(`Failed to install application "${chalk.yellow(n)}" on device "${chalk.yellow(e)}", please troubleshoot and try again `))):adbCommander.isInstalled(e,t).then((({isInstalled:r,err:o})=>{if(!0===r)return colorconsole.info(`Successfully installed application "${chalk.yellow(n)}" on device "${chalk.yellow(e)}" `),Promise.resolve()}))))):(colorconsole.warn(`Application "${chalk.yellow(n)}" has been installed on device "${chalk.yellow(e)}", so the installation did not continue this time`),Promise.resolve()))))));return Promise.all(e).then((()=>(colorconsole.log("All devices installed"),Promise.resolve()))).catch((()=>{process.exit()}))}catch(e){return Promise.reject(e)}}async function startServer(e){const{address:r}=await launchServer(_objectSpread({clearRecords:!0},e));return await compile("native","dev",!0,e),r}async function installdbg(e,r=!0){try{const{ip:o}=e;r&&await connectDevice(o);const t=await getConnectDevices(r),n=await queryDevice(t,"Install Quickapp debugger"),i=await downloadApk(e,!0);return await installApk(e,n,i,"org.hapjs.debugger","Quickapp debugger"),Promise.resolve("All devices successfully installed the Quickapp debugger")}catch(e){return Promise.reject(new Error(`Failed to install debugger, error message:${e.message}`))}}async function installmkp(e,r=!0){try{const{ip:o}=e;r&&await connectDevice(o);const t=await getConnectDevices(r),n=await queryDevice(t,"Install the Quickapp preview version"),i=await downloadApk(e);return await installApk(e,n,i,"org.hapjs.mockup","Quickapp preview version"),Promise.resolve("All devices successfully installed the Quickapp preview version")}catch(e){return Promise.reject(new Error(`Failed to install the preview version of Quickapp, error message:${e.message}`))}}async function queryDevice(e,r=""){if(!e||0===e.length)return void colorconsole.error("No device is connected yet, please confirm and try again");const o="All connected devices",t=(await inquirer.prompt([{name:"device",type:"list",message:`Please select the device that needs to execute command "${r}":`,choices:[...e,o]}])).device;return t===o?e:[t]}async function startDebugger(e=[],r){colorconsole.info("Starting the debugger for the connected device...");const o=Array.from(e,(e=>adbCommander.exeCommand(`adb -s ${e} shell am start -n "org.hapjs.debugger/.MainActivity" ${r}`).then((({err:r})=>r?(colorconsole.error(`Failed to start "Quickapp Debugger" on device "${chalk.yellow(e)}", please troubleshoot and try again`),Promise.reject(new Error(JSON.stringify(r)))):(colorconsole.info(`Successfully start "Quickapp Debugger" on device "${chalk.yellow(e)}" `),Promise.resolve())))));return Promise.all(o).then((()=>(colorconsole.info("The debuggers of all devices have started up"),Promise.resolve()))).catch((()=>{process.exit()}))}async function runapp(e,r=!0,o=!0){try{e.log&&colorconsole.attach(e.log);const{debugMode:t=!1,cardMode:n=!1}=e;let i="",c="",a="";const s=process.cwd();let l=e.includeStaticResources?"":"src";if(checkQuickappDir(s,l),n){colorconsole.warn('Please enable the "self-start" and "associated start" permissions of the Quickapp debugger and preview engine in the Android system');const e=getCardContent(s);if(e){const r=Object.keys(e);if(r.length>1){const o=await inquirer.prompt([{name:"cardName",type:"list",message:"Please select a card for debugging:",choices:r}]);c=e[o.cardName].path||`/${o.cardName}`}else c=e[r[0]].path||`/${r[0]}`;a+=`-e cardMode true -e cardPath ${c}`}}clearProjectRecord(clientRecordPath),i=await startServer(e),a+=` -e path ${i}`,i||(colorconsole.error("Failed to start local Quickapp service, please troubleshoot and try again"),process.exit()),o&&await connectDevice();const d=await getConnectDevices(r);d&&0!==d.length||(colorconsole.error("No connected devices available!!"),process.exit()),await startDebugger(d,a),setTimeout((async()=>{const e=await getClients();e||(colorconsole.error("No connected devices available!!"),process.exit());for(let r of e){const{sn:e,ip:o}=r;if("127.0.0.1"===o&&e.includes(":5555"))continue;const n=e&&e.length>0?e:o,i=()=>{colorconsole.error(`Error when device "${n}" gets the list of running platforms, request again after 3s delay`),setTimeout((()=>{c()}),3e3)},c=async()=>{let e=await sendReq(r,"/availablePlatforms");e||i(),e=JSON.parse(e);const{availablePlatforms:c}=e;if(c){let e;if(0===c.length)return void colorconsole.error(`Quickapp Engine is not installed on device ${o}`);if(1===c.length)e=c[0].pkg;else if(c.length>1){const r=await inquirer.prompt([{name:"name",type:"list",message:`Multiple Quickapp engines are detected on device "${n}", please select the operating platform:`,choices:c}]);c.forEach((o=>{o.name===r.name&&(e=o.pkg)}))}"OK"===await sendReq(r,"/platform",{selectedPlatform:e})&&sendReq(r,"/update",{debug:t})}else i()};await c()}}),3e3)}catch(e){return Promise.reject(new Error(`Error running RPK on the device, error message:${e.message}`))}}async function installAndRun(e){try{const r=process.cwd();checkQuickappDir(r),await installdbg(e),await installmkp(e,!1),await runapp(Object.assign({},e,{enableServerWatch:!0}),!1,!1)}catch(e){return Promise.reject(new Error(`One-click debugging error, error message:${e.message}`))}}async function getAvailablePlatform(e){try{const{ip:r,port:o,sn:t}=e;r&&ipRegExp.test(r)||(colorconsole.error("Did not pass in the correct ip address, eg: --ip 127.0.0.1"),process.exit()),o||(colorconsole.error("Did not pass in the correct port address,eg: --port 39517"),process.exit()),t||(colorconsole.error('Did not pass in the correct device serial number,view the serial number of the connected device through the "adb devices" command \n If it is a device connected via wifi, the format is "ip address:5555"'),process.exit());let n={ip:r,port:o};const i=()=>{colorconsole.error("Error when the device gets running platforms,request again after 3s delay"),setTimeout((()=>{c()}),3e3)},c=async()=>{let e=await sendReq(n,"/availablePlatforms");if(e)if(e=JSON.parse(e),e.availablePlatforms){const r=e.availablePlatforms;colorconsole.info(`The Quickapp engine list of device "${t}" is:${r.join(", ")}`)}else i();else i()};adbCommander.exeCommand(`adb -s ${t} shell am start -n "org.hapjs.debugger/.MainActivity"`).then((({err:e})=>{e&&(colorconsole.error("The debugger does not start normally, please check if it is installed"),process.exit()),colorconsole.info(`The debugger successfully runs on device "${chalk.yellow(t)}"`),colorconsole.info(`Device "${t}" is getting the list of fast application engines...`),c()}))}catch(e){colorconsole.error(`Error getting the list of Quickapp engines on the device, error message:${e.message}`)}}async function getAllConnectedDevices(e){try{return adbCommander.deviceList().then((({deviceList:e,err:r})=>{if(!r)return Promise.resolve(e);colorconsole.throw(r)}))}catch(e){return Promise.reject(new Error(`Error getting the array of all connected devices, error message:${e.message}`))}}module.exports={installAndRun:installAndRun,installdbg:installdbg,installmkp:installmkp,runapp:runapp,getAvailablePlatform:getAvailablePlatform,getAllConnectedDevices:getAllConnectedDevices};
2
- //# sourceMappingURL=debug.js.map
@@ -1,2 +0,0 @@
1
- "use strict";var _path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_glob=_interopRequireDefault(require("glob")),_inquirer=_interopRequireDefault(require("inquirer")),_chalk=_interopRequireDefault(require("chalk")),_sharedUtils=require("@aiot-toolkit/shared-utils"),_template=_interopRequireDefault(require("@aiot-toolkit/dsl-xvm/lib/template")),_template2=_interopRequireDefault(require("@aiot-toolkit/dsl-vue/lib/template")),_utils=require("@aiot-toolkit/compiler/lib/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const allSupportedDeviceArray=["phone","tv","car","watch","tv-h5"],allSupportedDevicesString=allSupportedDeviceArray.join(",");async function generate(e,t){""===e&&(e="HelloWorld");const a=await _inquirer.default.prompt([{type:"input",name:"name",message:"Init your project",default:e}]),r=_path.default.join(process.cwd(),a.name);try{await createProject(a.name,r,t)}catch(a){_sharedUtils.colorconsole.error(a.message),a.message.match(/Please pick a new name/)&&await generate(e,t)}}async function createProject(e,t,a={}){if(_fsExtra.default.existsSync(t))throw new Error(`"${t}" exists! Please pick a new name.`);if(!(0,_sharedUtils.mkdirsSync)(t))throw new Error('failed to created folder "'+t+'"!.');const{dsl:r,deviceType:l,templateType:i,web:o,minaH5:n,minaTv:s}=a;let p="";if(i&&!l)throw new Error("there is no deviceType specified");p=(0,_utils.hyphenedToCamelCase)(`${l}-${i}`);let u=["phone"];if(s&&(u=["tv-quickapp"]),n&&(u=["tv-h5"]),l&&l.length>0){const e=l.split(",");let t=new Set,a=new Set;e.map((e=>{e=e.toLowerCase();allSupportedDeviceArray.includes(e)||a.add(e),t.add(e)})),u=Array.from(t),a.size>0&&(_sharedUtils.colorconsole.warn(`These device types have not been officially supported by Quickapp: "${Array.from(a).join(",")}"`),_sharedUtils.colorconsole.warn(`Now Quickapp officially supports device types: "${allSupportedDevicesString}"`))}let c=null,d=null;switch(r){case"vue":c=_template2.default.app.demo,d=_template2.default.app.deviceJsonTemplate;break;default:c=o?_template.default.app.webDemo:n?_template.default.app.minaH5Demo:s?_template.default.app.minaTvDemo:p&&_template.default.app[p]?_template.default.app[p]:u.includes("watch")?_template.default.app.velaDemo:_template.default.app.demo,d=_template.default.app.deviceJsonTemplate}const f=_path.default.resolve(__dirname,c);await copyFiles(t,f,{_gitignore:".gitignore"});const _={appName:e,toolkitVersion:require("../../package.json").version};(n?["package.json","manifest.json"]:["src/manifest.json","package.json"]).map((e=>_path.default.join(t,e))).forEach((e=>{let t=_fsExtra.default.readFileSync(e,"utf-8");if(t=(0,_sharedUtils.renderString)(t,_),e.includes("manifest.json")){let e=JSON.parse(t.toString());e.deviceTypeList=u,e.minAPILevel=1,t=JSON.stringify(e,null,2)}_fsExtra.default.writeFileSync(e,t)})),n||u.map((a=>{const r=`config-${a}.json`,l=_path.default.join(d,r);let i="{}";_fsExtra.default.existsSync(l)&&(i=_fsExtra.default.readFileSync(l,"utf-8")),console.log(`${e}/src/${r} created`),_fsExtra.default.writeFileSync(_path.default.join(t,`src/config-${a}.json`),i)}))}function copyFiles(e,t,a){const r=_path.default.join(t,"**/{*,.*}"),l=_glob.default.sync(r,{nodir:!0,dot:!0}).map((r=>new Promise((l=>{const i=_path.default.relative(t,r),o=_path.default.join(e,a[i]||i);_fsExtra.default.existsSync(o)?l(_chalk.default.yellow(`${(0,_sharedUtils.relateCwd)(o)} already existed.`)):(l(`${(0,_sharedUtils.relateCwd)(o)} created.`),_fsExtra.default.copySync(r,o))}))));return Promise.all(l).then((e=>{console.log(e.join("\n"))}))}module.exports=generate;
2
- //# sourceMappingURL=init.js.map
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.packages=packages;var _path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_glob=_interopRequireDefault(require("glob")),_sharedUtils=require("@aiot-toolkit/shared-utils"),_config=require("@aiot-toolkit/shared-utils/config"),_index=require("@aiot-toolkit/packager/lib/process/index");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function packages(e={}){const t=_path.default.resolve(_config.projectPath,e.file),r=_path.default.resolve(_config.projectPath,e.output),a=_glob.default.sync("**/*.*",{cwd:t});if(!a.length)return _sharedUtils.colorconsole.error(`### App Loader ### ${e.file} folder is empty!`);let o="";try{const e=_path.default.resolve(t,"manifest.json"),r=(0,_sharedUtils.readJson)(e),{package:a}=r;o=a}catch(e){throw new _sharedUtils.KnownError(e)}const{fullPackage:i}=(0,_index.createPackagesDefinition)(o);(0,_index.allocateResourceToPackages)(a,t,i);const{rpkBuffer:l}=await(0,_index.buildProjectAndOutput)(i);_fsExtra.default.emptyDirSync(r),generateDistFile(l,r,`${o}.rpk`)}function generateDistFile(e,t,r){const a=_path.default.resolve(t,r);_fsExtra.default.writeFileSync(a,e);const o=_path.default.extname(r);_sharedUtils.colorconsole.log(`### App Loader ### Generate the ${o} file:${r} in the ${(0,_sharedUtils.relateCwd)(t)} directory!`)}
2
- //# sourceMappingURL=packages.js.map
@@ -1,2 +0,0 @@
1
- "use strict";var _sharedUtils=require("@aiot-toolkit/shared-utils/"),_createPreview=_interopRequireDefault(require("@aiot-toolkit/server/lib/preview/create-preview"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}module.exports=async function(e,{port:t}){(await(0,_createPreview.default)(e)).listen(t,(()=>{console.log(`> Visit the following address to see a preview of ${e}:\n> local: http://localhost:${t}/preview\n> LAN(Local Area Network): http://${(0,_sharedUtils.getIPv4IPAddress)()}:${t}/preview`)}))};
2
- //# sourceMappingURL=preview.js.map
@@ -1,2 +0,0 @@
1
- "use strict";var _child_process=_interopRequireDefault(require("child_process")),_os=_interopRequireDefault(require("os")),_path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_chalk=_interopRequireDefault(require("chalk"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function report(){const e=process.versions,r=_child_process.default.execSync("npm -v").toString(),o=process.arch,t=_os.default.release(),n=_os.default.type();console.log(_chalk.default.green("Collecting environmental information...")),_child_process.default.exec("npm list --json",{maxBuffer:10485760},((i,s,l)=>{if(i||l)return void console.error(i||l);const a=JSON.parse(s.toString()),u={nodeVersion:e,npmVersion:r,arch:o,osVersion:t,osType:n,dependenciesTree:a};_fsExtra.default.writeFileSync(_path.default.join(process.cwd(),"report.log"),JSON.stringify(u,null,2)),console.log(_chalk.default.green("Environmental information collected"))}))}module.exports=report;
2
- //# sourceMappingURL=report.js.map
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resign=resign;var _path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_glob=_interopRequireDefault(require("glob")),_index=require("@aiot-toolkit/packager/lib/index"),_sharedUtils=require("@aiot-toolkit/shared-utils"),_config=require("@aiot-toolkit/shared-utils/config");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function resign(e={}){const t=_path.default.resolve(_config.projectPath,e.dest);_fsExtra.default.emptyDirSync(t);const a=_fsExtra.default.readFileSync(_path.default.resolve(_config.projectPath,e.sign,"private.pem")),r=_fsExtra.default.readFileSync(_path.default.resolve(_config.projectPath,e.sign,"certificate.pem"));let i=[],o="";e.file?(o=_path.default.resolve(process.cwd(),e.file),i=[_path.default.basename(o)]):i=_glob.default.sync("**/*.{rpks,rpk}",{cwd:_path.default.resolve(_config.projectPath,e.origin)});const l=_path.default.resolve(_config.projectPath,e.dest),s=_path.default.resolve(_config.projectPath,e.origin),n=i.map((async t=>{const i=e.file?o:_path.default.resolve(s,t);let n=_fsExtra.default.readFileSync(i);t.endsWith(".rpk")&&(n=await(0,_index.signForRpk)(n,a,r)),t.endsWith(".rpks")&&(n=await(0,_index.signForRpks)(n,a,r)),generateDistFile(n,l,t)}));await Promise.all(n)}function generateDistFile(e,t,a){const r=_path.default.resolve(t,a);_fsExtra.default.writeFileSync(r,e);const i=_path.default.extname(a);_sharedUtils.colorconsole.log(`### App Loader ### Sign the ${(0,_sharedUtils.relateCwd)(t)} directory and generate the ${i} file:${a}`)}
2
- //# sourceMappingURL=resign.js.map
@@ -1,2 +0,0 @@
1
- "use strict";var _path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_glob=_interopRequireDefault(require("glob")),_chalk=_interopRequireDefault(require("chalk")),_semver=_interopRequireDefault(require("semver")),_inquirer=_interopRequireDefault(require("inquirer")),_sharedUtils=require("@aiot-toolkit/shared-utils"),_utils=require("./utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const curDir=process.cwd(),packageInfo=require("../../package.json"),dslModuleXvmDir=_path.default.dirname(require.resolve("@aiot-toolkit/dsl-xvm/package.json")),dslModuleVueDir=_path.default.dirname(require.resolve("@aiot-toolkit/dsl-vue/package.json")),dslModuleHash={xvm:dslModuleXvmDir,vue:dslModuleVueDir};let dslName,dslModuleDir;function checkVersion(){const e={cur:"",toolkit:"",res:0};let t;const a=_path.default.join(curDir,"package.json");return _fsExtra.default.existsSync(a)&&(t=JSON.parse(_fsExtra.default.readFileSync(a).toString()),e.cur=t.subversion&&t.subversion.toolkit||""),""===e.cur&&(e.res=1),e.toolkit=packageInfo.version,""===e.toolkit?(console.log("### App Toolkit ### The current toolkit file is wrong and cannot be upgraded. Please re-install and then upgrade"),e.res=-1,e):(1!==e.res&&(e.res=_semver.default.gt(e.toolkit,e.cur)?1:0),e)}function mergeProps(e,t){if(e)for(const a in t)e[a]||/babel-|^webpack$|^koa/.test(a)||(e[a]=t[a])}const dependencies=["babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-syntax-jsx","cross-env","css-what","koa","koa-body","koa-router","koa-send","koa-static","socket.io","style-loader","webpack"];function cleanupDependencies(e,t){if(t.force)return e.devDependencies={},Promise.resolve(e);if(!e.devDependencies)return Promise.resolve(e);const a=dependencies.filter((t=>e.devDependencies[t]));if(!a.length)return Promise.resolve(e);let o=Promise.resolve(dependencies);return t.updateDeps||(o=new Promise((e=>{const t=[{type:"confirm",name:"toDelete",message:"The module dependency that has been included in the hap-toolkit is detected, now remove it",default:!0},{type:"checkbox",name:"selectedDeps",message:"The selected modules below will be removed",choices:a.map((e=>({checked:!0,name:e}))),pageSize:a.length,when:function(e){return e.toDelete}}];_inquirer.default.prompt(t).then((t=>{e(t.toDelete?t.selectedDeps:[])}))}))),o.then((t=>(t.forEach((t=>{e.devDependencies[t]=void 0})),e)))}function upgradePackage(e){console.log(_chalk.default.green("升级 package.json"));const t=_path.default.join(curDir,"package.json"),a=require(t),o=require(_path.default.resolve(dslModuleDir,"templates/app/demo/package.json"));return e.force&&(o.devDependencies={}),o.devDependencies["hap-toolkit"]=packageInfo.version,o.subversion&&(o.subversion.toolkit=packageInfo.version),cleanupDependencies(a,e).then((e=>{for(const t in o){const l=o[t];"string"==typeof l&&a[t]?o[t]=e[t]:mergeProps(l,e[t])}_fsExtra.default.writeFileSync(t,JSON.stringify(o,null,2))}))}function copyFiles(e,t){const a=_path.default.join(t,"**/{*,.*}");_glob.default.sync(a).forEach((a=>{const o=_path.default.relative(t,a),l=_path.default.join(e,o);console.log(_chalk.default.green(`file ${(0,_sharedUtils.relateCwd)(l)} copied.`)),_fsExtra.default.copySync(a,l)}))}function upgradeSign(){console.log(_chalk.default.green("Upgrade signature file"));const e=_path.default.join(curDir,"sign/debug");_fsExtra.default.removeSync(e),(0,_sharedUtils.mkdirsSync)(e),copyFiles(e,_path.default.join(dslModuleDir,"templates/app/demo/sign/debug"))}function upgradeEslint(){const e=".eslintrc.json",t=_path.default.join(dslModuleDir,"templates/app/demo",e),a=_path.default.join(curDir,e);_fsExtra.default.copySync(t,a)}function upgradeBabelConfig(){const e="babel.config.js",t=".babelrc",a=_path.default.join(dslModuleDir,"templates/app/demo",e),o=_path.default.join(curDir,t),l=_path.default.join(curDir,e),r=(0,_utils.formatDate)("yyyyMMdd_hhmmss",new Date);if(console.log(_chalk.default.green("The project is upgraded to babel7, and the default configuration uses babel.config.js")),_fsExtra.default.existsSync(o)){const e=_path.default.join(curDir,".babelrc.old."+r);_fsExtra.default.copySync(o,e),_fsExtra.default.removeSync(o),console.log(_chalk.default.yellow(`### App Toolkit ### The backup file of .babelrc is saved as: ${(0,_sharedUtils.relateCwd)(e)}`))}if(_fsExtra.default.existsSync(l)){const t=_path.default.join(curDir,_path.default.basename(e,".js")+".old."+r+".js");_fsExtra.default.copySync(l,t),console.log(_chalk.default.yellow(`### App Toolkit ### The backup file of the updated ${e} is saved as: ${(0,_sharedUtils.relateCwd)(t)}`))}_fsExtra.default.existsSync(a)&&(_fsExtra.default.copySync(a,l),console.log(_chalk.default.yellow(`### App Toolkit ### The updated ${e} succeeded!`)))}function savePackage(){const e="package.json",t=_path.default.join(curDir,e),a=(0,_utils.formatDate)("yyyyMMdd_hhmmss",new Date),o=_path.default.join(curDir,_path.default.basename(e,".json")+".old."+a+".json");_fsExtra.default.copySync(t,o),console.log(_chalk.default.yellow(`### App Toolkit ### The updated backup file of ${e} is saved as: ${(0,_sharedUtils.relateCwd)(o)}`))}function updateProject(e){const t=checkVersion();if(e.force)console.log(_chalk.default.yellow(`Force upgrade project( ${t.cur} ----\x3e ${t.toolkit} )(There may be compatibility issues)`)),savePackage();else{if(t.res<0||0===t.res)return void(0===t.res&&console.log("### App Toolkit ### The version is already the latest version"));console.log(_chalk.default.green(`Upgrade project( ${t.cur} ----\x3e ${t.toolkit} )`))}dslName=(0,_sharedUtils.getProjectDslName)(curDir),dslModuleDir=dslModuleHash[dslName],upgradePackage(e).then((()=>{upgradeSign(),upgradeEslint(),upgradeBabelConfig(),console.log(_chalk.default.green("Upgrade complete, Please run npm install to update the dependency package"))}))}module.exports=updateProject;
2
- //# sourceMappingURL=update.js.map