UNPKG

@visulima/source-map

Version:

Provides functionality related to source maps.

62 lines (58 loc) 2.39 kB
'use strict'; const node_fs = require('node:fs'); const traceMapping = require('@jridgewell/trace-mapping'); const path = require('@visulima/path'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); const INLINE_SOURCEMAP_REGEX = /^data:application\/json[^,]+base64,/; const SOURCEMAP_REGEX = /\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+)[ \t]*$|\/\*[@#][ \t]+sourceMappingURL=([^*]+?)[ \t]*\*\/[ \t]*$/; const isInlineMap = /* @__PURE__ */ __name((url) => INLINE_SOURCEMAP_REGEX.test(url), "isInlineMap"); const resolveSourceMapUrl = /* @__PURE__ */ __name((sourceFile, sourcePath) => { const lines = sourceFile.split(/\r?\n/); let sourceMapUrl = null; for (let index = lines.length - 1; index >= 0 && !sourceMapUrl; index--) { sourceMapUrl = SOURCEMAP_REGEX.exec(lines[index]); } if (!sourceMapUrl) { return void 0; } return isInlineMap(sourceMapUrl[1]) ? sourceMapUrl[1] : path.resolve(sourcePath, sourceMapUrl[1]); }, "resolveSourceMapUrl"); const decodeInlineMap = /* @__PURE__ */ __name((data) => { const rawData = data.slice(data.indexOf(",") + 1); return Buffer.from(rawData, "base64").toString(); }, "decodeInlineMap"); const loadSourceMap = /* @__PURE__ */ __name((filename) => { let sourceMapContent; try { sourceMapContent = node_fs.readFileSync(filename, { encoding: "utf8" }); } catch (error) { error.message = `Error reading sourcemap for file "${path.toNamespacedPath(filename)}": ${path.toNamespacedPath(error.message)}`; throw error; } const sourceMapUrl = resolveSourceMapUrl(sourceMapContent, path.dirname(filename)); if (!sourceMapUrl) { return void 0; } let traceMapContent; if (isInlineMap(sourceMapUrl)) { traceMapContent = decodeInlineMap(sourceMapUrl); } else { try { traceMapContent = node_fs.readFileSync(sourceMapUrl, { encoding: "utf8" }); } catch (error) { error.message = `Error reading sourcemap for file "${path.toNamespacedPath(filename)}": ${path.toNamespacedPath(error.message)}`; throw error; } } try { return new traceMapping.AnyMap(traceMapContent, sourceMapUrl); } catch (error) { error.message = `Error parsing sourcemap for file "${path.toNamespacedPath(filename)}": ${error.message}`; throw error; } }, "loadSourceMap"); module.exports = loadSourceMap;