| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.genUTSComponentPublicInstanceImported = exports.genUTSComponentPublicInstanceIdent = exports.addUTSEasyComAutoImports = exports.getUTSEasyComAutoImports = exports.UNI_EASYCOM_EXCLUDE = exports.genResolveEasycomCode = exports.addImportDeclaration = exports.matchEasycom = exports.initEasycomsOnce = exports.initEasycoms = void 0;
- const fs_1 = __importDefault(require("fs"));
- const path_1 = __importDefault(require("path"));
- const debug_1 = __importDefault(require("debug"));
- const shared_1 = require("@vue/shared");
- const pluginutils_1 = require("@rollup/pluginutils");
- const uni_shared_1 = require("@dcloudio/uni-shared");
- const utils_1 = require("./utils");
- const pages_1 = require("./json/pages");
- const messages_1 = require("./messages");
- const uts_1 = require("./uts");
- const debugEasycom = (0, debug_1.default)('uni:easycom');
- const easycoms = [];
- const easycomsCache = new Map();
- const easycomsInvalidCache = new Set();
- let hasEasycom = false;
- function clearEasycom() {
- easycoms.length = 0;
- easycomsCache.clear();
- easycomsInvalidCache.clear();
- }
- function initEasycoms(inputDir, { dirs, platform, isX, }) {
- const componentsDir = path_1.default.resolve(inputDir, 'components');
- const uniModulesDir = path_1.default.resolve(inputDir, 'uni_modules');
- const initEasycomOptions = (pagesJson) => {
- // 初始化时,从once中读取缓存,refresh时,实时读取
- const { easycom } = pagesJson || (0, pages_1.parsePagesJson)(inputDir, platform, false);
- const easycomOptions = {
- isX,
- dirs: easycom && easycom.autoscan === false
- ? [...dirs] // 禁止自动扫描
- : [
- ...dirs,
- componentsDir,
- ...initUniModulesEasycomDirs(uniModulesDir),
- ],
- rootDir: inputDir,
- autoscan: !!(easycom && easycom.autoscan),
- custom: (easycom && easycom.custom) || {},
- extensions: [...(isX ? ['.uvue'] : []), ...['.vue', '.jsx', '.tsx']],
- };
- debugEasycom(easycomOptions);
- return easycomOptions;
- };
- const options = initEasycomOptions((0, pages_1.parsePagesJsonOnce)(inputDir, platform));
- const initUTSEasycom = () => {
- (0, uts_1.initUTSComponents)(inputDir, platform).forEach((item) => {
- const index = easycoms.findIndex((easycom) => item.name === easycom.name);
- if (index > -1) {
- easycoms.splice(index, 1, item);
- }
- else {
- easycoms.push(item);
- }
- });
- if (isX && globalThis.uts2jsSourceCodeMap) {
- ;
- globalThis.uts2jsSourceCodeMap.initUts2jsEasycom(easycoms);
- }
- };
- initEasycom(options);
- initUTSEasycom();
- const componentExtNames = isX ? 'uvue|vue' : 'vue';
- const res = {
- options,
- filter: (0, pluginutils_1.createFilter)([
- 'components/*/*.(' + componentExtNames + '|jsx|tsx)',
- 'uni_modules/*/components/*/*.(' + componentExtNames + '|jsx|tsx)',
- 'utssdk/*/**/*.(' + componentExtNames + ')',
- 'uni_modules/*/utssdk/*/*.(' + componentExtNames + ')',
- ], [], {
- resolve: inputDir,
- }),
- refresh() {
- res.options = initEasycomOptions();
- initEasycom(res.options);
- initUTSEasycom();
- },
- easycoms,
- };
- return res;
- }
- exports.initEasycoms = initEasycoms;
- exports.initEasycomsOnce = (0, uni_shared_1.once)(initEasycoms);
- function initUniModulesEasycomDirs(uniModulesDir) {
- if (!fs_1.default.existsSync(uniModulesDir)) {
- return [];
- }
- return fs_1.default
- .readdirSync(uniModulesDir)
- .map((uniModuleDir) => {
- const uniModuleComponentsDir = path_1.default.resolve(uniModulesDir, uniModuleDir, 'components');
- if (fs_1.default.existsSync(uniModuleComponentsDir)) {
- return uniModuleComponentsDir;
- }
- })
- .filter(Boolean);
- }
- function initEasycom({ isX, dirs, rootDir, custom, extensions, }) {
- clearEasycom();
- rootDir = (0, utils_1.normalizePath)(rootDir);
- const easycomsObj = Object.create(null);
- if (dirs && dirs.length && rootDir) {
- const autoEasyComObj = initAutoScanEasycoms(dirs, rootDir, extensions);
- if (isX) {
- Object.keys(autoEasyComObj).forEach((tagName) => {
- let source = autoEasyComObj[tagName];
- tagName = tagName.slice(1, -1);
- if (path_1.default.isAbsolute(source) && source.startsWith(rootDir)) {
- source = '@/' + (0, utils_1.normalizePath)(path_1.default.relative(rootDir, source));
- }
- addUTSEasyComAutoImports(source, [
- genUTSComponentPublicInstanceImported(rootDir, source),
- genUTSComponentPublicInstanceIdent(tagName),
- ]);
- });
- }
- (0, shared_1.extend)(easycomsObj, autoEasyComObj);
- }
- if (custom) {
- Object.keys(custom).forEach((name) => {
- const componentPath = custom[name];
- easycomsObj[name] = componentPath.startsWith('@/')
- ? (0, utils_1.normalizePath)(path_1.default.join(rootDir, componentPath.slice(2)))
- : componentPath;
- });
- }
- Object.keys(easycomsObj).forEach((name) => {
- easycoms.push({
- name: name.startsWith('^') && name.endsWith('$') ? name.slice(1, -1) : name,
- pattern: new RegExp(name),
- replacement: easycomsObj[name],
- });
- });
- debugEasycom(easycoms);
- hasEasycom = !!easycoms.length;
- return easycoms;
- }
- function matchEasycom(tag) {
- if (!hasEasycom) {
- return;
- }
- let source = easycomsCache.get(tag);
- if (source) {
- return source;
- }
- if (easycomsInvalidCache.has(tag)) {
- return false;
- }
- const matcher = easycoms.find((matcher) => matcher.pattern.test(tag));
- if (!matcher) {
- easycomsInvalidCache.add(tag);
- return false;
- }
- source = tag.replace(matcher.pattern, matcher.replacement);
- easycomsCache.set(tag, source);
- debugEasycom('matchEasycom', tag, source);
- return source;
- }
- exports.matchEasycom = matchEasycom;
- const isDir = (path) => fs_1.default.lstatSync(path).isDirectory();
- function initAutoScanEasycom(dir, rootDir, extensions) {
- if (!path_1.default.isAbsolute(dir)) {
- dir = path_1.default.resolve(rootDir, dir);
- }
- const easycoms = Object.create(null);
- if (!fs_1.default.existsSync(dir)) {
- return easycoms;
- }
- fs_1.default.readdirSync(dir).forEach((name) => {
- const folder = path_1.default.resolve(dir, name);
- if (!isDir(folder)) {
- return;
- }
- const importDir = (0, utils_1.normalizePath)(folder);
- const files = fs_1.default.readdirSync(folder);
- // 读取文件夹文件列表,比对文件名(fs.existsSync在大小写不敏感的系统会匹配不准确)
- for (let i = 0; i < extensions.length; i++) {
- const ext = extensions[i];
- if (files.includes(name + ext)) {
- easycoms[`^${name}$`] = `${importDir}/${name}${ext}`;
- break;
- }
- }
- });
- return easycoms;
- }
- function initAutoScanEasycoms(dirs, rootDir, extensions) {
- const conflict = {};
- const res = dirs.reduce((easycoms, dir) => {
- const curEasycoms = initAutoScanEasycom(dir, rootDir, extensions);
- Object.keys(curEasycoms).forEach((name) => {
- // Use the first component when name conflict
- const componentPath = easycoms[name];
- if (!componentPath) {
- easycoms[name] = curEasycoms[name];
- }
- else {
- ;
- (conflict[componentPath] || (conflict[componentPath] = [])).push(normalizeComponentPath(curEasycoms[name], rootDir));
- }
- });
- return easycoms;
- }, Object.create(null));
- const conflictComponents = Object.keys(conflict);
- if (conflictComponents.length) {
- console.warn(messages_1.M['easycom.conflict']);
- conflictComponents.forEach((com) => {
- console.warn([normalizeComponentPath(com, rootDir), conflict[com]].join(','));
- });
- }
- return res;
- }
- function normalizeComponentPath(componentPath, rootDir) {
- return (0, utils_1.normalizePath)(path_1.default.relative(rootDir, componentPath));
- }
- function addImportDeclaration(importDeclarations, local, source, imported) {
- importDeclarations.push(createImportDeclaration(local, source, imported));
- return local;
- }
- exports.addImportDeclaration = addImportDeclaration;
- function createImportDeclaration(local, source, imported) {
- if (imported) {
- return `import { ${imported} as ${local} } from '${source}';`;
- }
- return `import ${local} from '${source}';`;
- }
- const RESOLVE_EASYCOM_IMPORT_CODE = `import { resolveDynamicComponent as __resolveDynamicComponent } from 'vue';import { resolveEasycom } from '@dcloudio/uni-app';`;
- function genResolveEasycomCode(importDeclarations, code, name) {
- if (!importDeclarations.includes(RESOLVE_EASYCOM_IMPORT_CODE)) {
- importDeclarations.push(RESOLVE_EASYCOM_IMPORT_CODE);
- }
- return `resolveEasycom(${code.replace('_resolveComponent', '__resolveDynamicComponent')}, ${name})`;
- }
- exports.genResolveEasycomCode = genResolveEasycomCode;
- exports.UNI_EASYCOM_EXCLUDE = [/App.vue$/, /@dcloudio\/uni-h5/];
- const utsEasyComAutoImports = {};
- function getUTSEasyComAutoImports() {
- return utsEasyComAutoImports;
- }
- exports.getUTSEasyComAutoImports = getUTSEasyComAutoImports;
- function addUTSEasyComAutoImports(source, imports) {
- if (!utsEasyComAutoImports[source]) {
- utsEasyComAutoImports[source] = [imports];
- }
- else {
- if (!utsEasyComAutoImports[source].find((item) => item[0] === imports[0])) {
- utsEasyComAutoImports[source].push(imports);
- }
- }
- }
- exports.addUTSEasyComAutoImports = addUTSEasyComAutoImports;
- function genUTSComponentPublicInstanceIdent(tagName) {
- return (0, shared_1.capitalize)((0, shared_1.camelize)(tagName)) + 'ComponentPublicInstance';
- }
- exports.genUTSComponentPublicInstanceIdent = genUTSComponentPublicInstanceIdent;
- function genUTSComponentPublicInstanceImported(root, fileName) {
- root = (0, utils_1.normalizePath)(root);
- if (path_1.default.isAbsolute(fileName) && fileName.startsWith(root)) {
- fileName = (0, utils_1.normalizePath)(path_1.default.relative(root, fileName));
- }
- if (fileName.startsWith('@/')) {
- return ((0, uts_1.genUTSClassName)(fileName.replace('@/', '')) + 'ComponentPublicInstance');
- }
- return (0, uts_1.genUTSClassName)(fileName) + 'ComponentPublicInstance';
- }
- exports.genUTSComponentPublicInstanceImported = genUTSComponentPublicInstanceImported;
|