58 lines
2.4 KiB
JavaScript
58 lines
2.4 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.uniPostSourceMapPlugin = void 0;
|
||
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||
const path_1 = require("path");
|
||
function uniPostSourceMapPlugin() {
|
||
return {
|
||
name: 'uni:post-sourcemap',
|
||
apply: 'serve',
|
||
enforce: 'post',
|
||
configureServer(server) {
|
||
// cli 工程呢?
|
||
// 重要:hack 了 _pendingRequests,来修改 map
|
||
const pendingRequests = new PendingRequests();
|
||
pendingRequests._server = server;
|
||
pendingRequests._inputDir = (0, uni_cli_shared_1.normalizePath)(process.env.UNI_INPUT_DIR);
|
||
// @ts-expect-error
|
||
server._pendingRequests = pendingRequests;
|
||
},
|
||
};
|
||
}
|
||
exports.uniPostSourceMapPlugin = uniPostSourceMapPlugin;
|
||
function isSourceMap(map) {
|
||
return map && map.sources;
|
||
}
|
||
class PendingRequests extends Map {
|
||
set(key, value) {
|
||
const then = value.request.then;
|
||
// @ts-expect-error
|
||
value.request.then = (onFulfilled, onRejected) => {
|
||
// @ts-expect-error
|
||
return then.call(value.request, (request) => {
|
||
const map = request?.map;
|
||
if (map) {
|
||
// @ts-expect-error
|
||
const mod = this._server.moduleGraph._getUnresolvedUrlToModule(key);
|
||
if (mod && mod.file && (0, path_1.isAbsolute)(mod.file)) {
|
||
const dir = (0, uni_cli_shared_1.normalizePath)((0, path_1.dirname)(mod.file));
|
||
if (dir.startsWith(this._inputDir) && isSourceMap(map)) {
|
||
for (let sourcesIndex = 0; sourcesIndex < map.sources.length; ++sourcesIndex) {
|
||
const sourcePath = map.sources[sourcesIndex];
|
||
if (sourcePath) {
|
||
// 将相对路径转换为绝对路径
|
||
if (!(0, path_1.isAbsolute)(sourcePath)) {
|
||
map.sources[sourcesIndex] = (0, uni_cli_shared_1.normalizePath)((0, path_1.join)(dir, sourcePath));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return onFulfilled?.(request);
|
||
}, onRejected);
|
||
};
|
||
return super.set(key, value);
|
||
}
|
||
}
|