@hyext/builder-revues 0.0.1-beta.5 → 0.0.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,482 +3,4 @@
3
3
  * (c) 2024-2024 Alex
4
4
  * Released under the MIT License.
5
5
  */
6
- 'use strict';
7
-
8
- var fs = require('fs-extra');
9
- var path = require('path');
10
- var codeCompiler = require('@revues/code-compiler');
11
- var os = require('os');
12
- var chalk = require('chalk');
13
- var util = require('util');
14
- var glob = require('glob');
15
- var handlebars = require('handlebars');
16
- var liveServer = require('live-server');
17
- var archiver = require('archiver');
18
- var R = require('ramda');
19
-
20
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
-
22
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
23
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
24
- var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
25
- var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
26
- var handlebars__default = /*#__PURE__*/_interopDefaultLegacy(handlebars);
27
- var liveServer__default = /*#__PURE__*/_interopDefaultLegacy(liveServer);
28
- var archiver__default = /*#__PURE__*/_interopDefaultLegacy(archiver);
29
- var R__default = /*#__PURE__*/_interopDefaultLegacy(R);
30
-
31
- var EDeployMode;
32
- (function (EDeployMode) {
33
- EDeployMode[EDeployMode["Integration"] = 0] = "Integration";
34
- EDeployMode[EDeployMode["Separate"] = 1] = "Separate";
35
- })(EDeployMode || (EDeployMode = {}));
36
-
37
- const cacheDir = path__default["default"].join(os__default["default"].tmpdir(), '.revue_cache');
38
- // 根据环境变量判断 要不要把运行框架代码留在项目内 还是 CDN
39
- const deployMode = EDeployMode.Integration;
40
- const staticPath = path__default["default"].resolve(__dirname, '../static' );
41
-
42
- const filename = 'project.config.json';
43
- function copyProjectConfigJSON(srcDir, destDir) {
44
- fs__default["default"].copyFileSync(path__default["default"].join(srcDir, filename), path__default["default"].join(destDir, filename));
45
- }
46
-
47
- function initCacheDir() {
48
- if (fs__default["default"].existsSync(cacheDir))
49
- return;
50
- fs__default["default"].mkdirSync(cacheDir);
51
- }
52
-
53
- // 写成构建插件是最好的,不入侵中间产物,现在图个快
54
- function replaceWebAdapter(projectPath) {
55
- const sourcePath = path__default["default"].join(projectPath, 'web-adapter.js');
56
- const nodePath = require.resolve('@revues/cocos-web-adapter/dist/index.js');
57
- if (fs__default["default"].existsSync(sourcePath)) {
58
- fs__default["default"].writeFileSync(sourcePath, fs__default["default"].readFileSync(nodePath));
59
- }
60
- else {
61
- throw new Error('The web-adapter.js was not found from project root.');
62
- }
63
- }
64
-
65
- async function compile(projectPath, outputPath) {
66
- initCacheDir();
67
- await codeCompiler.compilerManager.init({
68
- projectPath,
69
- outputPath,
70
- cachePath: cacheDir
71
- });
72
- await codeCompiler.compilerManager.compileDev();
73
- copyProjectConfigJSON(projectPath, outputPath);
74
- }
75
- async function compileGame(projectPath, outputPath) {
76
- initCacheDir();
77
- replaceWebAdapter(projectPath);
78
- await codeCompiler.compilerManager.init({
79
- projectPath,
80
- outputPath,
81
- cachePath: cacheDir
82
- });
83
- await codeCompiler.compilerManager.compileDev();
84
- copyProjectConfigJSON(projectPath, outputPath);
85
- }
86
-
87
- const sep = chalk__default["default"].gray('·');
88
- const createLogger = (prefix) => {
89
- prefix = ` ${prefix}`;
90
- const logger = {
91
- log(...args) {
92
- const msg = util.format.apply(util.format, args);
93
- console.log(chalk__default["default"].white(prefix), sep, msg);
94
- },
95
- fatal(...args) {
96
- if (args[0] instanceof Error)
97
- args[0] = args[0].message.trim();
98
- const msg = util.format.apply(util.format, args);
99
- console.error(chalk__default["default"].red(prefix), sep, msg);
100
- process.exit(1);
101
- },
102
- success(...args) {
103
- const msg = util.format.apply(util.format, args);
104
- console.log(chalk__default["default"].green(prefix), sep, msg);
105
- }
106
- };
107
- return logger;
108
- };
109
- var logger = createLogger('REVUE');
110
-
111
- const HOST = {
112
- test: '//test-extsdk.msstatic.com',
113
- prod: '//extsdk-msstatic.cdn.huya.com'
114
- };
115
- // $1是动态的extType
116
- function getSDKUrlTemplate(opts) {
117
- return `${HOST.prod}/sdk/$1/${opts.hostId}/${opts.extUuid || 0}/sdk.js`;
118
- }
119
-
120
- function render(content, data, opts) {
121
- const temp = handlebars__default["default"].compile(content);
122
- return temp(data, opts);
123
- }
124
- function renderTemplate(input, output, data) {
125
- const content = fs__default["default"]
126
- .readFileSync(input)
127
- .toString();
128
- fs__default["default"].outputFileSync(output, render(content, data));
129
- }
130
-
131
- function isMainPackage(config) {
132
- return config.name === codeCompiler.pkgFileType.MainPkg && config.root === '.';
133
- }
134
- function getPackageConfig(basePath) {
135
- const filePath = path__default["default"].join(basePath, 'packageConfig.json');
136
- return fs__default["default"].readJSONSync(filePath);
137
- }
138
-
139
- // TODO: 改异步
140
- // 合并游戏分包到主包
141
- function mergeGamePackage(releasePath, opts) {
142
- const publicPath = ''; // 留口子,cdn资源路径
143
- const packagePath = path__default["default"].join(releasePath, 'package');
144
- const gamePackageConfig = getPackageConfig(packagePath);
145
- const targetIndex = gamePackageConfig.findIndex(item => {
146
- return isMainPackage(item);
147
- });
148
- if (targetIndex === -1) {
149
- throw new Error('无法找到主包构建信息');
150
- }
151
- const mainPakConf = gamePackageConfig[targetIndex];
152
- gamePackageConfig.splice(targetIndex, 1);
153
- const subPakConfList = gamePackageConfig;
154
- if (subPakConfList.length > 0) {
155
- // 合并分包资源到子包
156
- mergeSubPackagesToMainPackage(packagePath, mainPakConf, subPakConfList);
157
- }
158
- const frameworkPath = path__default["default"].join(staticPath, 'framework');
159
- const templatePath = path__default["default"].join(staticPath, 'template');
160
- const mainPath = path__default["default"].join(packagePath, mainPakConf.name);
161
- // 安置本地框架文件
162
- if (deployMode === EDeployMode.Integration) {
163
- // 迁移运行框架
164
- fs__default["default"].copySync(frameworkPath, path__default["default"].join(releasePath, 'framework'));
165
- // 迁移SDK
166
- const nodePath = require.resolve('@revues/web-sdk-core');
167
- const sdkPath = path__default["default"].join(releasePath, 'sdk');
168
- const sdkFilePath = path__default["default"].join(sdkPath, 'web-sdk-core.js');
169
- fs__default["default"].mkdirSync(sdkPath);
170
- fs__default["default"].outputFileSync(sdkFilePath, fs__default["default"].readFileSync(nodePath));
171
- }
172
- // 渲染模版
173
- renderGameTemplate({
174
- hyextSDKUrl: getSDKUrlTemplate({
175
- hostId: opts.hostId,
176
- extUuid: opts.extUuid
177
- }),
178
- sourcePathPrefix: deployMode === EDeployMode.Integration
179
- ? path__default["default"].relative(mainPath, releasePath)
180
- : publicPath,
181
- templatePath,
182
- mainPath
183
- });
184
- // wasn文件 会被 cocos 同步请求,由于二进制文件同步请求失败 所以改为 base64 文本
185
- transformWasnFileToBase64File(mainPath);
186
- return {
187
- mainPath,
188
- main: mainPakConf,
189
- entryPath: 'package/' + mainPakConf.name + '/index.html'
190
- };
191
- }
192
- function renderGameTemplate(opts) {
193
- const { mainPath, sourcePathPrefix, templatePath, hyextSDKUrl } = opts;
194
- const data = {
195
- sourcePathPrefix,
196
- hyextSDKUrl
197
- };
198
- const templateConfList = [
199
- {
200
- input: path__default["default"].join(templatePath, 'game-frame.hbs'),
201
- output: path__default["default"].join(mainPath, 'game-frame.html'),
202
- data
203
- },
204
- {
205
- input: path__default["default"].join(templatePath, 'minigame-page-manager.hbs'),
206
- output: path__default["default"].join(mainPath, 'index.html'),
207
- data
208
- }
209
- ];
210
- templateConfList.forEach(config => {
211
- renderTemplate(config.input, config.output, config.data);
212
- });
213
- }
214
- const ignorePath = [
215
- "node_modules/**/*",
216
- "**/node_modules/**",
217
- "**/.git/**",
218
- ".git/**/*",
219
- "**/.svn/**",
220
- ".svn/**/*",
221
- ".DS_Store",
222
- "**/.DS_Store",
223
- ];
224
- function transformWasnFileToBase64File(mainPath) {
225
- const files = glob.sync('**/**.wasm', {
226
- cwd: mainPath,
227
- ignore: ignorePath,
228
- nodir: true,
229
- absolute: false,
230
- });
231
- console.log('transform wasm to base64 files: \n', files);
232
- files.forEach((file) => {
233
- const abs = path__default["default"].join(mainPath, file);
234
- const text = fs__default["default"].readFileSync(abs).toString('base64');
235
- fs__default["default"].outputFileSync(abs + '.txt', text);
236
- });
237
- }
238
- function mergeSubPackagesToMainPackage(packagePath, main, subList) {
239
- const mainPath = path__default["default"].join(packagePath, main.name);
240
- subList.forEach(conf => {
241
- const subPath = path__default["default"].join(packagePath, conf.name, conf.root);
242
- const dest = path__default["default"].join(mainPath, conf.root);
243
- fs__default["default"].moveSync(subPath, dest, { overwrite: true });
244
- fs__default["default"].removeSync(path__default["default"].join(packagePath, conf.name));
245
- });
246
- }
247
-
248
- var httpsConf = {
249
- cert: fs__default["default"].readFileSync(path__default["default"].join(__dirname, "./certs/cert.pem")),
250
- key: fs__default["default"].readFileSync(path__default["default"].join(__dirname, "./certs/key.pem")),
251
- passphrase: ""
252
- };
253
-
254
- function startLiveServer(opts) {
255
- var params = {
256
- port: opts.port,
257
- host: opts.host,
258
- root: opts.root,
259
- open: false,
260
- ignore: opts.ignore,
261
- file: "index.html",
262
- wait: 1000,
263
- mount: opts.mount,
264
- logLevel: 1,
265
- https: httpsConf
266
- };
267
- // @ts-expect-error
268
- liveServer__default["default"].start(params);
269
- }
270
-
271
- function compress(output) {
272
- return new Promise((resolve, reject) => {
273
- const stream = fs__default["default"].createWriteStream(`${output}.zip`), archive = archiver__default["default"]('zip', { zlib: { level: 9 } });
274
- stream.on('close', () => {
275
- const size = archive.pointer();
276
- resolve({ name: `${path__default["default"].basename(output)}.zip`, size });
277
- }),
278
- archive.on('warning', e => {
279
- if ('ENOENT' !== e.code)
280
- throw e;
281
- }),
282
- archive.on('error', e => {
283
- reject(e);
284
- throw e;
285
- }),
286
- archive.pipe(stream),
287
- archive.directory(`${output}`, false),
288
- archive.finalize();
289
- });
290
- }
291
-
292
- async function makeBuildResults(mode, opts) {
293
- const { baseURI, extTypes, entryInfo, outputPath } = opts;
294
- const releasePath = path__default["default"].join(outputPath, 'build-result');
295
- const buildResultList = extTypes.map(type => {
296
- const buildResult = {
297
- [type]: {
298
- type: 'HTML',
299
- content: {
300
- pages: [
301
- {
302
- path: getPagePath(type, entryInfo)
303
- }
304
- ],
305
- baseURI
306
- }
307
- }
308
- };
309
- return {
310
- type,
311
- buildResult
312
- };
313
- });
314
- if (mode === 'development') {
315
- const fsTasks = buildResultList.map((buildResultInfo) => {
316
- return fs__default["default"].outputFile(path__default["default"].join(releasePath, buildResultInfo.type + '.json'), JSON.stringify(buildResultInfo.buildResult, null, 2));
317
- });
318
- await Promise.all(fsTasks);
319
- }
320
- return buildResultList.map((item) => item.buildResult);
321
- }
322
- function getPagePath(extType, entryInfo) {
323
- let entry = entryInfo.entryPath + `?extType=${extType}`;
324
- // 移动端需要补 __module_busi__
325
- if (extType.endsWith('_h5')) {
326
- entry += '&__module_busi__=kiwi-ExtSDK';
327
- }
328
- return entry;
329
- }
330
-
331
- const getIPAddress = () => {
332
- const ifaces = os__default["default"].networkInterfaces();
333
- const addresses = R__default["default"].flatten(R__default["default"].values(ifaces));
334
- const address = R__default["default"].filter((iface) => /(ipv)?4/ig.test(iface.family) && !/^127\./.test(iface.address), addresses);
335
- return address;
336
- };
337
- const getPublicIP = (config) => {
338
- const address = getIPAddress();
339
- /*
340
- * 有多个 ip 地址又没有在 config.host 中指定的话, 直接退出
341
- */
342
- if (address && address.length > 1) {
343
- logger.log(`检测到本机有多个 ip 地址:\n- ${address
344
- .map((x) => x.address)
345
- .join('\n- ')}`);
346
- logger.log('请在 project.config.json 的 host 中指定正确的 ip');
347
- process.exit(1);
348
- }
349
- if (address && address.length <= 0) {
350
- logger.log('未能找到本机 ip 地址, 本地开发 app 侧将无法加载小程序');
351
- process.exit(1);
352
- }
353
- return address[0]?.address;
354
- };
355
-
356
- const supportedExtTypeSet = new Set([
357
- 'web_video_com',
358
- 'app_panel_h5',
359
- 'zs_anchor_panel_h5',
360
- 'pc_anchor_panel',
361
- 'pc_panel'
362
- ]);
363
- function checkExtTypes(extTypes) {
364
- let unsupportList = [];
365
- if (!extTypes || extTypes.length === 0) {
366
- logger.fatal('请在project.config.json相应地方填写supportExtTypes.');
367
- }
368
- else {
369
- extTypes.forEach((item) => {
370
- if (!supportedExtTypeSet.has(item)) {
371
- unsupportList.push(item);
372
- }
373
- });
374
- }
375
- if (unsupportList.length > 0) {
376
- logger.fatal(`未支持的小程序类型:${unsupportList.join('|')}.`);
377
- }
378
- }
379
- function processDevConfig(config) {
380
- // 强制开启
381
- config.https = true;
382
- if (config.host == null) {
383
- config.host = getPublicIP() || ''; // 用ip地址不用localshot
384
- }
385
- if (config.port == null) {
386
- config.port = 18080;
387
- }
388
- }
389
- function processGlobalConfig(config) {
390
- if (config.hostId == null) {
391
- config.hostId = 'huyaext';
392
- }
393
- }
394
- function processBuilderConfigJSON(mode, config) {
395
- const opts = { ...config };
396
- checkExtTypes(config.supportExtTypes);
397
- processGlobalConfig(opts);
398
- if (mode === 'development') {
399
- processDevConfig(opts);
400
- }
401
- return opts;
402
- }
403
- function getDevBaseURI(config) {
404
- const protocol = config.https ? 'https' : 'http';
405
- return `${protocol}://${config.host}:${config.port}/`;
406
- }
407
-
408
- class RevueBuilder {
409
- // 这里拿到打包好的代码 原样输出 + build result
410
- async build(opts) {
411
- const { inputPath, outputPath, publicPath, projectConfig, config, extUuid } = opts;
412
- const processedConfig = processBuilderConfigJSON('production', config);
413
- fs__default["default"].existsSync(outputPath) && fs__default["default"].removeSync(outputPath);
414
- // 把 inputPath 的文件 迁移到 outputPath
415
- fs__default["default"].copySync(inputPath, outputPath);
416
- if (projectConfig.compileType == 'game') {
417
- logger.log('正在合并分包...');
418
- const entryInfo = mergeGamePackage(outputPath, {
419
- hostId: processedConfig.hostId,
420
- extUuid: extUuid
421
- });
422
- logger.success('合并分包完成');
423
- return await makeBuildResults('production', {
424
- entryInfo,
425
- baseURI: publicPath,
426
- extTypes: processedConfig.supportExtTypes,
427
- outputPath
428
- });
429
- }
430
- }
431
- async start(opts) {
432
- const { inputPath, projectConfig, outputPath: outputPath$1, config } = opts;
433
- const outputPath = outputPath$1 || path__default["default"].join(__dirname, '../../temp');
434
- const processedConfig = processBuilderConfigJSON('development', config);
435
- if (projectConfig.compileType == 'game') {
436
- await compileGame(inputPath, outputPath);
437
- logger.log('正在合并分包...');
438
- const entryInfo = mergeGamePackage(outputPath, {
439
- hostId: processedConfig.hostId,
440
- extUuid: undefined
441
- });
442
- logger.success('合并分包完成');
443
- logger.log('启动 live server 服务...');
444
- logger.log('本地访问地址:', getDevBaseURI(processedConfig) +
445
- entryInfo.entryPath +
446
- '?extType=web_video_com');
447
- startLiveServer({
448
- ...processedConfig,
449
- root: outputPath
450
- });
451
- return await makeBuildResults('development', {
452
- entryInfo,
453
- baseURI: getDevBaseURI(processedConfig),
454
- extTypes: processedConfig.supportExtTypes,
455
- outputPath
456
- });
457
- }
458
- }
459
- // 这里仅仅在 client 打包 小程序/小游戏
460
- async release(opts) {
461
- const { contextPath, releasePath, projectConfig } = opts;
462
- if (fs__default["default"].existsSync(releasePath)) {
463
- fs__default["default"].removeSync(releasePath);
464
- }
465
- const projectName = projectConfig.projectName || projectConfig.projectname || 'project';
466
- const outputPath = path__default["default"].join(releasePath, projectName);
467
- if (projectConfig.compileType == 'game') {
468
- await compileGame(contextPath, outputPath);
469
- }
470
- else {
471
- await compile(contextPath, outputPath);
472
- }
473
- // zip
474
- const zipPath = path__default["default"].join(releasePath, projectName);
475
- await compress(zipPath);
476
- }
477
- config() {
478
- }
479
- providedProjectConfig() {
480
- }
481
- }
482
- const revueBuilder = new RevueBuilder();
483
-
484
- module.exports = revueBuilder;
6
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),o=require("@revues/code-compiler"),n=require("os"),a=require("chalk"),r=require("util"),i=require("glob"),u=require("handlebars"),s=require("live-server"),l=require("archiver"),c=require("ramda");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f,p=d(e),m=d(t),h=d(n),y=d(a),g=d(u),j=d(s),v=d(l),x=d(c);!function(e){e[e.Integration=0]="Integration",e[e.Separate=1]="Separate"}(f||(f={}));const w=m.default.join(h.default.tmpdir(),".revue_cache"),S=f.Integration,P=m.default.resolve(__dirname,"../static"),_="project.config.json";function b(e,t){p.default.copyFileSync(m.default.join(e,_),m.default.join(t,_))}function I(){p.default.existsSync(w)||p.default.mkdirSync(w)}async function k(e,t){I(),function(e){const t=m.default.join(e,"web-adapter.js"),o=require.resolve("@revues/cocos-web-adapter/dist/index.js");if(!p.default.existsSync(t))throw new Error("The web-adapter.js was not found from project root.");p.default.writeFileSync(t,p.default.readFileSync(o))}(e),await o.compilerManager.init({projectPath:e,outputPath:t,cachePath:w}),await o.compilerManager.compileDev(),b(e,t)}const E=y.default.gray("·");var T=(e=>{e=` ${e}`;return{log(...t){const o=r.format.apply(r.format,t);console.log(y.default.white(e),E,o)},fatal(...t){t[0]instanceof Error&&(t[0]=t[0].message.trim());const o=r.format.apply(r.format,t);console.error(y.default.red(e),E,o),process.exit(1)},success(...t){const o=r.format.apply(r.format,t);console.log(y.default.green(e),E,o)}}})("REVUE");const U={test:"//test-extsdk.msstatic.com",prod:"//extsdk-msstatic.cdn.huya.com"};function $(e){return`${U.prod}/sdk/$1/${e.hostId}/${e.extUuid||0}/sdk.js`}function q(e,t,o){const n=p.default.readFileSync(e).toString();p.default.outputFileSync(t,function(e,t,o){return g.default.compile(e)(t,o)}(n,o))}function F(e,t){const n=m.default.join(e,"package"),a=function(e){const t=m.default.join(e,"packageConfig.json");return p.default.readJSONSync(t)}(n),r=a.findIndex((e=>{return(t=e).name===o.pkgFileType.MainPkg&&"."===t.root;var t}));if(-1===r)throw new Error("无法找到主包构建信息");const u=a[r];a.splice(r,1);const s=a;s.length>0&&function(e,t,o){const n=m.default.join(e,t.name);o.forEach((t=>{const o=m.default.join(e,t.name,t.root),a=m.default.join(n,t.root);p.default.moveSync(o,a,{overwrite:!0}),p.default.removeSync(m.default.join(e,t.name))}))}(n,u,s);const l=m.default.join(P,"framework"),c=m.default.join(P,"template"),d=m.default.join(n,u.name);if(S===f.Integration){p.default.copySync(l,m.default.join(e,"framework"));const t=require.resolve("@revues/web-sdk-core"),o=m.default.join(e,"sdk"),n=m.default.join(o,"web-sdk-core.js");p.default.mkdirSync(o),p.default.outputFileSync(n,p.default.readFileSync(t))}return function(e){const{mainPath:t,sourcePathPrefix:o,templatePath:n,hyextSDKUrl:a}=e,r={sourcePathPrefix:o,hyextSDKUrl:a},i=[{input:m.default.join(n,"game-frame.hbs"),output:m.default.join(t,"game-frame.html"),data:r},{input:m.default.join(n,"minigame-page-manager.hbs"),output:m.default.join(t,"index.html"),data:r}];i.forEach((e=>{q(e.input,e.output,e.data)}))}({hyextSDKUrl:$({hostId:t.hostId,extUuid:t.extUuid}),sourcePathPrefix:S===f.Integration?m.default.relative(d,e):"",templatePath:c,mainPath:d}),function(e){const t=i.sync("**/**.wasm",{cwd:e,ignore:D,nodir:!0,absolute:!1});console.log("transform wasm to base64 files: \n",t),t.forEach((t=>{const o=m.default.join(e,t),n=p.default.readFileSync(o).toString("base64");p.default.outputFileSync(o+".txt",n)}))}(d),{mainPath:d,main:u,entryPath:"package/"+u.name+"/index.html"}}const D=["node_modules/**/*","**/node_modules/**","**/.git/**",".git/**/*","**/.svn/**",".svn/**/*",".DS_Store","**/.DS_Store"];var z={cert:p.default.readFileSync(m.default.join(P,"./certs/cert.pem")),key:p.default.readFileSync(m.default.join(P,"./certs/key.pem")),passphrase:""};async function M(e,t){const{baseURI:o,extTypes:n,entryInfo:a,outputPath:r}=t,i=m.default.join(r,"build-result"),u={},s=n.map((e=>{const t={type:"HTML",content:{pages:[{path:R(e,a)}],baseURI:o}};return u[e]=t,{type:e,buildResult:{[e]:t}}}));if("development"===e){const e=s.map((e=>p.default.outputFile(m.default.join(i,e.type+".json"),JSON.stringify(e.buildResult,null,2))));await Promise.all(e)}return u}function R(e,t){let o=t.entryPath+`?extType=${e}`;return e.endsWith("_h5")&&(o+="&__module_busi__=kiwi-ExtSDK"),o}const C=e=>{const t=(()=>{const e=h.default.networkInterfaces(),t=x.default.flatten(x.default.values(e));return x.default.filter((e=>/(ipv)?4/gi.test(e.family)&&!/^127\./.test(e.address)),t)})();return t&&t.length>1&&(T.log(`检测到本机有多个 ip 地址:\n- ${t.map((e=>e.address)).join("\n- ")}`),T.log("请在 project.config.json 的 host 中指定正确的 ip"),process.exit(1)),t&&t.length<=0&&(T.log("未能找到本机 ip 地址, 本地开发 app 侧将无法加载小程序"),process.exit(1)),t[0]?.address},N=new Set(["web_video_com","app_panel_h5","zs_anchor_panel_h5","pc_anchor_panel","pc_panel"]);function K(e,t){const o={...t};return function(e){let t=[];e&&0!==e.length?e.forEach((e=>{N.has(e)||t.push(e)})):T.fatal("请在project.config.json相应地方填写supportExtTypes."),t.length>0&&T.fatal(`未支持的小程序类型:${t.join("|")}.`)}(t.supportExtTypes),function(e){null==e.hostId&&(e.hostId="huyaext")}(o),"development"===e&&function(e){e.https=!0,null==e.host&&(e.host=C()||""),null==e.port&&(e.port=18080)}(o),o}function O(e){return`${e.https?"https":"http"}://${e.host}:${e.port}/`}const J=new class{async build(e){const{inputPath:t,outputPath:o,publicPath:n,projectConfig:a,config:r,extUuid:i}=e,u=K("production",r);if(p.default.existsSync(o)&&p.default.removeSync(o),await p.default.copy(t,o,{overwrite:!0}),"game"==a.compileType){T.log("正在合并分包...");const e=F(o,{hostId:u.hostId,extUuid:i});return T.success("合并分包完成"),await M("production",{entryInfo:e,baseURI:n,extTypes:u.supportExtTypes,outputPath:o})}}async start(e){const{inputPath:t,projectConfig:o,outputPath:n,config:a}=e,r=n||m.default.join(__dirname,"../../temp"),i=K("development",a);if("game"==o.compileType){await k(t,r),T.log("正在合并分包...");const e=F(r,{hostId:i.hostId,extUuid:void 0});return T.success("合并分包完成"),T.log("启动 live server 服务..."),T.log("本地访问地址:",O(i)+e.entryPath+"?extType=web_video_com"),function(e){var t={port:e.port,host:e.host,root:e.root,open:!1,ignore:e.ignore,file:"index.html",wait:1e3,mount:e.mount,logLevel:1,https:z};j.default.start(t)}({...i,root:r}),await M("development",{entryInfo:e,baseURI:O(i),extTypes:i.supportExtTypes,outputPath:r})}}async release(e){const{contextPath:t,releasePath:n,projectConfig:a}=e;p.default.existsSync(n)&&p.default.removeSync(n);const r=a.projectName||a.projectname||"project",i=m.default.join(n,r);"game"==a.compileType?await k(t,i):await async function(e,t){I(),await o.compilerManager.init({projectPath:e,outputPath:t,cachePath:w}),await o.compilerManager.compileDev(),b(e,t)}(t,i);const u=m.default.join(n,r);var s;await(s=u,new Promise(((e,t)=>{const o=p.default.createWriteStream(`${s}.zip`),n=v.default("zip",{zlib:{level:9}});o.on("close",(()=>{const t=n.pointer();e({name:`${m.default.basename(s)}.zip`,size:t})})),n.on("warning",(e=>{if("ENOENT"!==e.code)throw e})),n.on("error",(e=>{throw t(e),e})),n.pipe(o),n.directory(`${s}`,!1),n.finalize()})))}config(){}providedProjectConfig(){}};module.exports=J,exports.default=J;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyext/builder-revues",
3
- "version": "0.0.1-beta.5",
3
+ "version": "0.0.1-beta.7",
4
4
  "description": "> TODO: description",
5
5
  "author": "diamondloler <857276958@qq.com>",
6
6
  "homepage": "",
@@ -22,9 +22,9 @@
22
22
  },
23
23
  "scripts": {},
24
24
  "dependencies": {
25
- "@revues/cocos-web-adapter": "0.0.1-beta.5",
26
- "@revues/code-compiler": "0.0.1-beta.5",
27
- "@revues/web-sdk-core": "0.0.1-beta.5",
25
+ "@revues/cocos-web-adapter": "0.0.1-beta.7",
26
+ "@revues/code-compiler": "0.0.1-beta.7",
27
+ "@revues/web-sdk-core": "0.0.1-beta.7",
28
28
  "archiver": "^7.0.1",
29
29
  "chalk": "^2.4.2",
30
30
  "fs-extra": "8.1.0",
@@ -39,5 +39,5 @@
39
39
  "@types/live-server": "^1.2.3",
40
40
  "@types/ramda": "^0.29.11"
41
41
  },
42
- "gitHead": "de36e79faace33f7f8efa457c89671d053faa923"
42
+ "gitHead": "925db5afe414cc3c21ab7f417c67b2179945827b"
43
43
  }
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIID6zCCAtOgAwIBAgIUPDlH/8sZ9WTUpxrVsQPQgxweFkcwDQYJKoZIhvcNAQEL
3
+ BQAwgYQxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0RvbmcxEjAQBgNVBAcM
4
+ CUd1YW5nemhvdTENMAsGA1UECgwESFVZQTEOMAwGA1UECwwFSFlFWFQxDTALBgNV
5
+ BAMMBEFsZXgxHzAdBgkqhkiG9w0BCQEWEDg1NzI3Njk1OEBxcS5jb20wHhcNMjQw
6
+ MzE0MDMwNjA2WhcNMzQwMzEyMDMwNjA2WjCBhDELMAkGA1UEBhMCQ04xEjAQBgNV
7
+ BAgMCUd1YW5nRG9uZzESMBAGA1UEBwwJR3Vhbmd6aG91MQ0wCwYDVQQKDARIVVlB
8
+ MQ4wDAYDVQQLDAVIWUVYVDENMAsGA1UEAwwEQWxleDEfMB0GCSqGSIb3DQEJARYQ
9
+ ODU3Mjc2OTU4QHFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
10
+ AKw2HdDc+7KreihQzErKxvMoGdW6jem9qvwEwGTpy2N9knj2mE4im7MK107zeklI
11
+ S6BpJrn9uzpWvDpk/beF+nEeKaEGEgxaGVM7YMVVmdlqvfFTcGzYFBuUtO/Benk5
12
+ ESNlsG5U58g3BoMjC3YyxE0W0O7hCWjHN1eC8F85Mq4LB2GlWtRpQRifqdR/H9ql
13
+ GZNBtwOxv5FP1vGwEi6u7YXZhCqMeOcUKmGcd0hO5OJrhjdV9cV0V838s0jWghzc
14
+ RrNvZihlbXeNeWkMYJHf0fbcXswF0N/CRdQkJ9Vmj5S+ET1rfjiSJxoV68bFk8M7
15
+ 7M2iZyklUHXoY3o7MVm5h4sCAwEAAaNTMFEwHQYDVR0OBBYEFJln0RGjC3q0WDsq
16
+ 272Lskjg5gliMB8GA1UdIwQYMBaAFJln0RGjC3q0WDsq272Lskjg5gliMA8GA1Ud
17
+ EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHDwHlPp9VF1JD7OVijPCCGy
18
+ HYXFOmfre0GUBeBRYYwENbvENkL64sWTlkl11Ij90hONAmtN70gu9w+rq9fXdWlP
19
+ /GBsT846QnXByw9lkdxUEUDI9M1oGMDuiWPAoW10yvPpEaL1OQeJ/wcVwMF7MiY8
20
+ OFypybsVY7K9EoNOutQvi2KVm+Y91hkO3mlCdkJsaHDOmGD7hghTUnvNwsXgzTJW
21
+ N6rCMBqGwZRiWfynjSjTs4qxucMal/ynKv9n20JTDuXiDJZvna+RpOWEFu5zrylO
22
+ LOjzkwNiSLJ2XlWf19LKoSLep22R8dKmFEYlUmwNhv7CgCCsQO00Zci5I3ovkEU=
23
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsNh3Q3Puyq3oo
3
+ UMxKysbzKBnVuo3pvar8BMBk6ctjfZJ49phOIpuzCtdO83pJSEugaSa5/bs6Vrw6
4
+ ZP23hfpxHimhBhIMWhlTO2DFVZnZar3xU3Bs2BQblLTvwXp5OREjZbBuVOfINwaD
5
+ Iwt2MsRNFtDu4QloxzdXgvBfOTKuCwdhpVrUaUEYn6nUfx/apRmTQbcDsb+RT9bx
6
+ sBIuru2F2YQqjHjnFCphnHdITuTia4Y3VfXFdFfN/LNI1oIc3Eazb2YoZW13jXlp
7
+ DGCR39H23F7MBdDfwkXUJCfVZo+UvhE9a344kicaFevGxZPDO+zNomcpJVB16GN6
8
+ OzFZuYeLAgMBAAECggEAP3PLJZ+e4BTdtEgdFfvENWjTqBQOYQ8BFs3bY/Ne/QAS
9
+ PZ7CvJt02hIHBjChIKpSLz8/RS2P1G2L+komz/2+KvrNpOabNNDn3uqUe/FP+DOj
10
+ 2+z+EiTFt+nhhyu3aD4WKgA4c1a2dmeL7zq06O7ItIzRHAtvz5sDsattzPBC06xh
11
+ 3XjdG2w9KYFXLnoOXrZz1W+rbF9mgZa9CZ5WYJrWYcMoqBP3J5yGrQRhzZBxmeDX
12
+ Bxe67nRSJqR4VP/2m7l3QAYRnOAzRCZ1OK0ft/qWl2SqAcp7Tx8oZg9IQlrAzecR
13
+ IFQw29r4dwhR4ghjBwVzG2Q2g6wQv29GxnDMOYrvzQKBgQDrwkDtPoEQq095TrDP
14
+ qavPWlQ3PIW5biFANgb9Ffv5mgzbg6cZKPISvt1r8EBByUr3uYlXH/6W8pDNbK8Z
15
+ TdgKJR3RYpn5rdA6ckVv+cEGnhzYvDlrG99KiM428+get5ulPQXqHskvB3njuagN
16
+ MMYWC+vZpSk8VCUVQiQfuiwGRwKBgQC6/ydATwxRdsp8kbrnTA6mx7FlNc5QLbIz
17
+ Llqwh/m75BuNAYhGPBJo3o3YOAA6V1kbJyk35lq9VR7IY1oVX233N4Pyjd+tsJW0
18
+ JBxeL6550j0e75zDjORDoaKpI5KwJdtdbPKWVPQxfDKRidrrySSlVuTord7TGiqr
19
+ Bb4lm9ninQKBgQCEilTOC9GreWPYovCsDotUq0elNhVHxi5TVwxexDlAfea0kjMi
20
+ 5e4Rs9PvlsXJNk07L8eSf541ZnEZy/w0kZrfOTamPHSr9ZeXBB8dcJ+gBMva3Ra6
21
+ rJS/5mFoa38XpcmO/9uPX3djRSS1be6YW89BHbqeRUgFbpjadrCwVY3iiQKBgDVe
22
+ PMWNyeY2EPQcY0s/2a6fr3FDOe6IHCOfRyK6q/uDzpkfptTksBxd5/2dffMomrW1
23
+ J35cr+j5Mh/euwb+hVPY9D91XjEkBJW0+KOo2BLMfcUmfYcR3tOufc3n6SV8qG6x
24
+ eUqOVGMLHyOKRICml17YvdvqQ33cKfFFYk85e6XBAoGBAOYd6bNklsrc7O7Z6SRy
25
+ yvgcog4KcZoit+u7Rk0EmBZPH+t1UV3oPzangbz//Sncc9eff2CL7oOeZ+wFNVju
26
+ SaMyB2WdHAjvr+3GXQRAK30oMq9bDWRPllLZQYBxeyI4WT7lper0N8chsQJov6L8
27
+ h1NaWG1BAenT2ffayHW6ZOR6
28
+ -----END PRIVATE KEY-----