descriptorCache.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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.setSrcDescriptor = exports.getSrcDescriptor = exports.getDescriptor = exports.createDescriptor = exports.cache = exports.getResolvedOptions = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const crypto_1 = require("crypto");
  9. const utils_1 = require("../utils");
  10. function getResolvedOptions() {
  11. return {
  12. root: process.env.UNI_INPUT_DIR,
  13. sourceMap: process.env.UNI_APP_SOURCEMAP === 'true' ||
  14. process.env.NODE_ENV === 'development',
  15. // eslint-disable-next-line no-restricted-globals
  16. compiler: require('@vue/compiler-sfc'),
  17. targetLanguage: process.env.UNI_UTS_TARGET_LANGUAGE,
  18. };
  19. }
  20. exports.getResolvedOptions = getResolvedOptions;
  21. exports.cache = new Map();
  22. function createDescriptor(filename, source, { root, sourceMap, compiler }) {
  23. // ensure the path is normalized in a way that is consistent inside
  24. // project (relative to root) and on different systems.
  25. const relativeFilename = (0, utils_1.parseUTSRelativeFilename)(filename, root);
  26. // 传入normalizedPath是为了让sourcemap记录的是相对路径
  27. const { descriptor, errors } = compiler.parse(source, {
  28. filename: relativeFilename,
  29. sourceMap,
  30. });
  31. descriptor.relativeFilename = relativeFilename;
  32. // 重置为绝对路径
  33. descriptor.filename = filename;
  34. descriptor.id = getHash(relativeFilename);
  35. exports.cache.set(filename, descriptor);
  36. return { descriptor, errors };
  37. }
  38. exports.createDescriptor = createDescriptor;
  39. function getDescriptor(filename, options, createIfNotFound = true) {
  40. if (exports.cache.has(filename)) {
  41. return exports.cache.get(filename);
  42. }
  43. if (createIfNotFound) {
  44. const { descriptor, errors } = createDescriptor(filename, fs_1.default.readFileSync(filename, 'utf-8'), options);
  45. if (errors.length) {
  46. throw errors[0];
  47. }
  48. return descriptor;
  49. }
  50. }
  51. exports.getDescriptor = getDescriptor;
  52. function getSrcDescriptor(filename) {
  53. return exports.cache.get(filename);
  54. }
  55. exports.getSrcDescriptor = getSrcDescriptor;
  56. function setSrcDescriptor(filename, entry) {
  57. exports.cache.set(filename, entry);
  58. }
  59. exports.setSrcDescriptor = setSrcDescriptor;
  60. function getHash(text) {
  61. return (0, crypto_1.createHash)('sha256').update(text).digest('hex').substring(0, 8);
  62. }