uni_modules.js 3.3 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
"use strict";
fxy060608's avatar
fxy060608 已提交
2
var __importDefault = (this && this.__importDefault) || function (mod) {
fxy060608's avatar
fxy060608 已提交
3 4 5
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
fxy060608's avatar
fxy060608 已提交
6
exports.parseInject = exports.parseInjects = exports.parseUniExtApis = void 0;
fxy060608's avatar
fxy060608 已提交
7 8 9
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const merge_1 = require("merge");
fxy060608's avatar
fxy060608 已提交
10
function parseUniExtApis() {
fxy060608's avatar
fxy060608 已提交
11 12
    const uniModulesDir = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'uni_modules');
    if (!fs_extra_1.default.existsSync(uniModulesDir)) {
fxy060608's avatar
fxy060608 已提交
13
        return {};
fxy060608's avatar
fxy060608 已提交
14
    }
fxy060608's avatar
fxy060608 已提交
15
    const injects = {};
fxy060608's avatar
fxy060608 已提交
16 17 18 19 20 21 22 23 24 25
    fs_extra_1.default.readdirSync(uniModulesDir).forEach((uniModuleDir) => {
        var _a, _b;
        // 必须以 uni- 开头
        if (!uniModuleDir.startsWith('uni-')) {
            return;
        }
        const pkgPath = path_1.default.resolve(uniModulesDir, uniModuleDir, 'package.json');
        if (!fs_extra_1.default.existsSync(pkgPath)) {
            return;
        }
fxy060608's avatar
fxy060608 已提交
26
        const exports = (_b = (_a = JSON.parse(fs_extra_1.default.readFileSync(pkgPath, 'utf8'))) === null || _a === void 0 ? void 0 : _a.uni_modules) === null || _b === void 0 ? void 0 : _b['uni-ext-api'];
fxy060608's avatar
fxy060608 已提交
27
        if (exports) {
fxy060608's avatar
fxy060608 已提交
28
            Object.assign(injects, parseInjects(process.env.UNI_PLATFORM === 'h5' ? 'web' : process.env.UNI_PLATFORM, `@/uni_modules/${uniModuleDir}`, exports));
fxy060608's avatar
fxy060608 已提交
29 30
        }
    });
fxy060608's avatar
fxy060608 已提交
31
    return injects;
fxy060608's avatar
fxy060608 已提交
32
}
fxy060608's avatar
fxy060608 已提交
33
exports.parseUniExtApis = parseUniExtApis;
fxy060608's avatar
fxy060608 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
/**
 *  uni:'getBatteryInfo'
 * import getBatteryInfo from '..'
 *
 * uni:['getBatteryInfo']
 * import { getBatteryInfo } from '..'
 *
 * uni:['openLocation','chooseLocation']
 * import { openLocation, chooseLocation } from '..'
 *
 * uni:{
 *  onUserCaptureScreen: "onCaptureScreen"
 *  offUserCaptureScreen: "offCaptureScreen"
 * }
 *
 * uni.getBatteryInfo = getBatteryInfo
 * @param source
 * @param globalObject
 * @param define
 * @returns
 */
fxy060608's avatar
fxy060608 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
function parseInjects(platform, source, exports = {}) {
    let rootDefines = {};
    Object.keys(exports).forEach((name) => {
        if (name.startsWith('uni')) {
            rootDefines[name] = exports[name];
        }
    });
    const platformDefines = exports[platform];
    // 该平台不支持
    if (platformDefines === false) {
        return {};
    }
    if (platformDefines) {
        rootDefines = (0, merge_1.recursive)(true, rootDefines, platformDefines);
    }
    const injects = {};
    for (const key in rootDefines) {
        Object.assign(injects, parseInject(source, 'uni', rootDefines[key]));
    }
    return injects;
}
exports.parseInjects = parseInjects;
function parseInject(source, globalObject, define) {
    const injects = {};
    if (define === false) {
    }
    else if (typeof define === 'string') {
        // {'uni.getBatteryInfo' : '@dcloudio/uni-getbatteryinfo'}
        injects[globalObject + '.' + define] = source;
fxy060608's avatar
fxy060608 已提交
84 85
    }
    else if (Array.isArray(define)) {
fxy060608's avatar
fxy060608 已提交
86
        // {'uni.getBatteryInfo' : ['@dcloudio/uni-getbatteryinfo','getBatteryInfo]}
fxy060608's avatar
fxy060608 已提交
87
        define.forEach((d) => {
fxy060608's avatar
fxy060608 已提交
88
            injects[globalObject + '.' + d] = [source, d];
fxy060608's avatar
fxy060608 已提交
89 90 91 92 93
        });
    }
    else {
        const keys = Object.keys(define);
        keys.forEach((d) => {
fxy060608's avatar
fxy060608 已提交
94
            injects[globalObject + '.' + d] = [source, define[d]];
fxy060608's avatar
fxy060608 已提交
95 96
        });
    }
fxy060608's avatar
fxy060608 已提交
97
    return injects;
fxy060608's avatar
fxy060608 已提交
98
}
fxy060608's avatar
fxy060608 已提交
99
exports.parseInject = parseInject;