You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.6 KiB

2 months ago
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.uniApiPlugin = void 0;
const utils_1 = require("../utils");
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
let enableFacialRecognition = false;
function isEnableFacialRecognition() {
return enableFacialRecognition;
}
function setEnableFacialRecognition(enable) {
enableFacialRecognition = enable;
}
function checkGetMetaInfo(code) {
return code.includes('window.getMetaInfo');
}
function checkFacialRecognition(code) {
return code.includes('getFacialRecognitionMetaInfo');
}
function uniApiPlugin() {
let viteServer = undefined;
const inputDir = (0, uni_cli_shared_1.normalizePath)(process.env.UNI_INPUT_DIR);
return {
name: 'uni:h5-api',
enforce: 'pre',
configureServer(server) {
viteServer = server;
},
transform(code, id) {
if (!viteServer)
return;
// 通过transform阶段识别仅判断inputDir内部的文件避免框架文件影响
if (!isEnableFacialRecognition() &&
(0, uni_cli_shared_1.normalizePath)(id).startsWith(inputDir)) {
if (checkFacialRecognition(code)) {
setEnableFacialRecognition(true);
// 开发模式触发重新刷新
viteServer.hot.send({
type: 'full-reload',
path: '*',
});
}
}
},
generateBundle(_options, bundle) {
if (viteServer)
return;
if (!isEnableFacialRecognition()) {
const filesNames = Object.keys(bundle);
for (const fileName of filesNames) {
const chunk = bundle[fileName];
if (chunk && chunk.type === 'chunk' && chunk.code) {
setEnableFacialRecognition(checkFacialRecognition(chunk.code) || checkGetMetaInfo(chunk.code));
}
}
}
},
transformIndexHtml: {
order: 'post',
handler() {
if (!isEnableFacialRecognition()) {
return;
}
return [
{
tag: 'script',
attrs: {
src: utils_1.AliYunCloudAuthWebSDK,
},
injectTo: 'head',
},
];
},
},
};
}
exports.uniApiPlugin = uniApiPlugin;