easycom.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.uniEasycomPlugin = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const shared_1 = require("@vue/shared");
  9. const pluginutils_1 = require("@rollup/pluginutils");
  10. const url_1 = require("../utils/url");
  11. const constants_1 = require("../../constants");
  12. const easycom_1 = require("../../easycom");
  13. function uniEasycomPlugin(options) {
  14. const filter = (0, pluginutils_1.createFilter)(options.include, options.exclude);
  15. return {
  16. name: 'uni:app-easycom',
  17. transform(code, id) {
  18. if (!filter(id)) {
  19. return;
  20. }
  21. const { filename } = (0, url_1.parseVueRequest)(id);
  22. if (!constants_1.EXTNAME_VUE_TEMPLATE.includes(path_1.default.extname(filename))) {
  23. return;
  24. }
  25. if (!code.includes('_resolveComponent')) {
  26. return;
  27. }
  28. let i = 0;
  29. const importDeclarations = [];
  30. code = code.replace(/_resolveComponent\("(.+?)"(, true)?\)/g, (str, name) => {
  31. if (name && !name.startsWith('_')) {
  32. const source = (0, easycom_1.matchEasycom)(name);
  33. if (source) {
  34. // 处理easycom组件优先级
  35. return (0, easycom_1.genResolveEasycomCode)(importDeclarations, str, (0, easycom_1.addImportDeclaration)(importDeclarations, `__easycom_${i++}`, source, source.includes('uts-proxy')
  36. ? (0, shared_1.capitalize)((0, shared_1.camelize)(name)) + 'Component'
  37. : ''));
  38. }
  39. }
  40. return str;
  41. });
  42. if (importDeclarations.length) {
  43. code = importDeclarations.join('') + code;
  44. }
  45. return {
  46. code,
  47. map: null,
  48. };
  49. },
  50. };
  51. }
  52. exports.uniEasycomPlugin = uniEasycomPlugin;