"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); } }