imports.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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.findVueComponentImports = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const es_module_lexer_1 = require("es-module-lexer");
  9. const shared_1 = require("@vue/shared");
  10. const types_1 = require("@babel/types");
  11. const parser_1 = require("@babel/parser");
  12. const constants_1 = require("../constants");
  13. const utils_1 = require("../utils");
  14. /**
  15. * 暂时没用
  16. * @param source
  17. * @param importer
  18. * @param resolve
  19. * @returns
  20. */
  21. async function findVueComponentImports(source, importer, resolve) {
  22. await es_module_lexer_1.init;
  23. let imports = [];
  24. // strip UTF-8 BOM
  25. if (source.charCodeAt(0) === 0xfeff) {
  26. source = source.slice(1);
  27. }
  28. try {
  29. imports = (0, es_module_lexer_1.parse)(source)[0];
  30. }
  31. catch (e) {
  32. console.error(e);
  33. }
  34. if (!imports.length) {
  35. return [];
  36. }
  37. const rewriteImports = [];
  38. for (let i = 0; i < imports.length; i++) {
  39. const importSpecifier = imports[i];
  40. const { n } = importSpecifier;
  41. if (!n) {
  42. continue;
  43. }
  44. const extname = path_1.default.extname(n);
  45. // 仅处理没有后缀,或后缀是.vue,.nvue的文件
  46. if (extname && !constants_1.EXTNAME_VUE.includes(extname)) {
  47. continue;
  48. }
  49. const res = await resolve(n, importer);
  50. if (!res) {
  51. continue;
  52. }
  53. if (constants_1.EXTNAME_VUE_RE.test(res.id)) {
  54. const expr = (0, parser_1.parse)(source.slice(importSpecifier.ss, importSpecifier.se), {
  55. plugins: (0, utils_1.normalizeParsePlugins)(res.id),
  56. sourceType: 'module',
  57. }).program.body[0];
  58. if ((0, types_1.isImportDeclaration)(expr) && expr.specifiers.length === 1) {
  59. const importDefaultSpecifier = expr.specifiers[0];
  60. if (!(0, types_1.isImportDefaultSpecifier)(importDefaultSpecifier)) {
  61. continue;
  62. }
  63. rewriteImports.push((0, shared_1.extend)(importSpecifier, {
  64. n: res.id,
  65. i: importDefaultSpecifier.local.name,
  66. }));
  67. }
  68. }
  69. }
  70. return rewriteImports;
  71. }
  72. exports.findVueComponentImports = findVueComponentImports;