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.
58 lines
2.2 KiB
58 lines
2.2 KiB
6 months ago
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.setSrcDescriptor = exports.getSrcDescriptor = exports.getDescriptor = exports.setPrevDescriptor = exports.getPrevDescriptor = exports.createDescriptor = void 0;
|
||
|
const fs_1 = __importDefault(require("fs"));
|
||
|
const path_1 = __importDefault(require("path"));
|
||
|
const crypto_1 = require("crypto");
|
||
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||
|
const cache = new Map();
|
||
|
const prevCache = new Map();
|
||
|
function createDescriptor(filename, source, { root, sourceMap, compiler }) {
|
||
|
const { descriptor, errors } = compiler.parse(source, {
|
||
|
filename,
|
||
|
sourceMap,
|
||
|
});
|
||
|
// ensure the path is normalized in a way that is consistent inside
|
||
|
// project (relative to root) and on different systems.
|
||
|
const normalizedPath = (0, uni_cli_shared_1.normalizePath)(path_1.default.normalize(path_1.default.relative(root, filename)));
|
||
|
descriptor.id = getHash(normalizedPath);
|
||
|
cache.set(filename, descriptor);
|
||
|
return { descriptor, errors };
|
||
|
}
|
||
|
exports.createDescriptor = createDescriptor;
|
||
|
function getPrevDescriptor(filename) {
|
||
|
return prevCache.get(filename);
|
||
|
}
|
||
|
exports.getPrevDescriptor = getPrevDescriptor;
|
||
|
function setPrevDescriptor(filename, entry) {
|
||
|
prevCache.set(filename, entry);
|
||
|
}
|
||
|
exports.setPrevDescriptor = setPrevDescriptor;
|
||
|
function getDescriptor(filename, options, createIfNotFound = true) {
|
||
|
if (cache.has(filename)) {
|
||
|
return cache.get(filename);
|
||
|
}
|
||
|
if (createIfNotFound) {
|
||
|
const { descriptor, errors } = createDescriptor(filename, fs_1.default.readFileSync(filename, 'utf-8'), options);
|
||
|
if (errors.length) {
|
||
|
throw errors[0];
|
||
|
}
|
||
|
return descriptor;
|
||
|
}
|
||
|
}
|
||
|
exports.getDescriptor = getDescriptor;
|
||
|
function getSrcDescriptor(filename) {
|
||
|
return cache.get(filename);
|
||
|
}
|
||
|
exports.getSrcDescriptor = getSrcDescriptor;
|
||
|
function setSrcDescriptor(filename, entry) {
|
||
|
cache.set(filename, entry);
|
||
|
}
|
||
|
exports.setSrcDescriptor = setSrcDescriptor;
|
||
|
function getHash(text) {
|
||
|
return (0, crypto_1.createHash)('sha256').update(text).digest('hex').substring(0, 8);
|
||
|
}
|