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.
164 lines
6.1 KiB
164 lines
6.1 KiB
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.initUTSComponents = exports.resolveUTSCompiler = exports.resolveUtsModule = exports.resolveUtsAppModule = void 0;
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
const hbx_1 = require("./hbx");
|
|
const utils_1 = require("./utils");
|
|
/**
|
|
* 解析 app 平台的 uts 插件,任意平台(android|ios)存在即可
|
|
* @param id
|
|
* @param importer
|
|
* @returns
|
|
*/
|
|
function resolveUtsAppModule(id, importer) {
|
|
id = path_1.default.resolve(importer, id);
|
|
if (id.includes('utssdk') || id.includes('uni_modules')) {
|
|
const parts = (0, utils_1.normalizePath)(id).split('/');
|
|
const parentDir = parts[parts.length - 2];
|
|
if (parentDir === 'uni_modules' || parentDir === 'utssdk') {
|
|
const basedir = parentDir === 'uni_modules' ? 'utssdk' : '';
|
|
if (fs_1.default.existsSync(path_1.default.resolve(id, basedir, 'index.uts'))) {
|
|
return id;
|
|
}
|
|
const resolvePlatformDir = (p) => {
|
|
return path_1.default.resolve(id, basedir, p);
|
|
};
|
|
const extname = ['.uts'];
|
|
if (resolveUtsFile(resolvePlatformDir('app-android'), extname)) {
|
|
return id;
|
|
}
|
|
if (resolveUtsFile(resolvePlatformDir('app-ios'), extname)) {
|
|
return id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.resolveUtsAppModule = resolveUtsAppModule;
|
|
// 仅限 root/uni_modules/test-plugin | root/utssdk/test-plugin 格式
|
|
function resolveUtsModule(id, importer) {
|
|
if (process.env.UNI_PLATFORM === 'app' ||
|
|
process.env.UNI_PLATFORM === 'app-plus') {
|
|
return resolveUtsAppModule(id, importer);
|
|
}
|
|
id = path_1.default.resolve(importer, id);
|
|
if (id.includes('utssdk') || id.includes('uni_modules')) {
|
|
const parts = (0, utils_1.normalizePath)(id).split('/');
|
|
const parentDir = parts[parts.length - 2];
|
|
if (parentDir === 'uni_modules' || parentDir === 'utssdk') {
|
|
const basedir = parentDir === 'uni_modules' ? 'utssdk' : '';
|
|
const resolvePlatformDir = (p) => {
|
|
return path_1.default.resolve(id, basedir, p);
|
|
};
|
|
let index = resolveUtsFile(resolvePlatformDir(process.env.UNI_UTS_PLATFORM));
|
|
if (index) {
|
|
return index;
|
|
}
|
|
index = path_1.default.resolve(id, basedir, 'index.uts');
|
|
if (fs_1.default.existsSync(index)) {
|
|
return index;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.resolveUtsModule = resolveUtsModule;
|
|
function resolveUtsFile(dir, extensions = ['.uts', '.ts', '.js']) {
|
|
for (let i = 0; i < extensions.length; i++) {
|
|
const indexFile = path_1.default.join(dir, 'index' + extensions[i]);
|
|
if (fs_1.default.existsSync(indexFile)) {
|
|
return indexFile;
|
|
}
|
|
}
|
|
}
|
|
function resolveUTSCompiler() {
|
|
let compilerPath = '';
|
|
if ((0, hbx_1.isInHBuilderX)()) {
|
|
try {
|
|
compilerPath = require.resolve(path_1.default.resolve(process.env.UNI_HBUILDERX_PLUGINS, 'uniapp-uts-v1'));
|
|
}
|
|
catch (e) { }
|
|
}
|
|
if (!compilerPath) {
|
|
try {
|
|
compilerPath = require.resolve('@dcloudio/uni-uts-v1', {
|
|
paths: [process.env.UNI_CLI_CONTEXT],
|
|
});
|
|
}
|
|
catch (e) {
|
|
let utsCompilerVersion = utils_1.version;
|
|
if (utils_1.version.startsWith('2.0.')) {
|
|
utsCompilerVersion = '^3.0.0-alpha-3060920221117001';
|
|
}
|
|
console.error((0, utils_1.installDepTips)('devDependencies', '@dcloudio/uni-uts-v1', utsCompilerVersion));
|
|
process.exit(0);
|
|
}
|
|
}
|
|
return require(compilerPath);
|
|
}
|
|
exports.resolveUTSCompiler = resolveUTSCompiler;
|
|
function initUTSComponents(inputDir, platform) {
|
|
const components = [];
|
|
if (platform !== 'app' && platform !== 'app-plus') {
|
|
return components;
|
|
}
|
|
const easycomsObj = Object.create(null);
|
|
const dirs = resolveUTSComponentDirs(inputDir);
|
|
dirs.forEach((dir) => {
|
|
const is_uni_modules_utssdk = dir.endsWith('utssdk');
|
|
const is_ussdk = !is_uni_modules_utssdk && path_1.default.dirname(dir).endsWith('utssdk');
|
|
if (is_uni_modules_utssdk || is_ussdk) {
|
|
fast_glob_1.default
|
|
.sync('**/*.vue', {
|
|
cwd: dir,
|
|
absolute: true,
|
|
})
|
|
.forEach((file) => {
|
|
let name = parseVueComponentName(file);
|
|
if (!name) {
|
|
if (file.endsWith('index.vue')) {
|
|
name = path_1.default.basename(is_uni_modules_utssdk ? path_1.default.dirname(dir) : dir);
|
|
}
|
|
}
|
|
if (name) {
|
|
const importDir = (0, utils_1.normalizePath)(is_uni_modules_utssdk ? path_1.default.dirname(dir) : dir);
|
|
easycomsObj[`^${name}$`] = `\0${importDir}?uts-proxy`;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
Object.keys(easycomsObj).forEach((name) => {
|
|
components.push({
|
|
pattern: new RegExp(name),
|
|
replacement: easycomsObj[name],
|
|
});
|
|
});
|
|
return components;
|
|
}
|
|
exports.initUTSComponents = initUTSComponents;
|
|
function resolveUTSComponentDirs(inputDir) {
|
|
const utssdkDir = path_1.default.resolve(inputDir, 'utssdk');
|
|
const uniModulesDir = path_1.default.resolve(inputDir, 'uni_modules');
|
|
return fast_glob_1.default
|
|
.sync('*', {
|
|
cwd: utssdkDir,
|
|
absolute: true,
|
|
onlyDirectories: true,
|
|
})
|
|
.concat(fast_glob_1.default.sync('*/utssdk', {
|
|
cwd: uniModulesDir,
|
|
absolute: true,
|
|
onlyDirectories: true,
|
|
}));
|
|
}
|
|
const nameRE = /name\s*:\s*['|"](.*)['|"]/;
|
|
function parseVueComponentName(file) {
|
|
const content = fs_1.default.readFileSync(file, 'utf8');
|
|
const matches = content.match(nameRE);
|
|
if (matches) {
|
|
return matches[1];
|
|
}
|
|
}
|
|
|