UNPKG

@sentry/remix

Version:
44 lines (41 loc) • 1.7 kB
import * as fs from 'node:fs'; import * as path from 'node:path'; import { UNSTAMPED_FETCH } from './assetServer.js'; import { findDebugId, addDebugIdToSourceMap } from './debugId.js'; async function emitAssets(options) { const { assets, entries, outDir } = options; const fetchMap = assets[UNSTAMPED_FETCH] ?? ((request) => assets.fetch(request)); const emitted = []; for (const url of await assets.getPreloads([...entries])) { const response = await assets.fetch(new Request(`http://asset-server${url}`)); if (response?.status !== 200) { continue; } const source = await response.text(); const debugId = findDebugId(source); const file = path.join(outDir, toRelativePath(url)); fs.mkdirSync(path.dirname(file), { recursive: true }); fs.writeFileSync(file, source); const asset = { url, file, debugId }; const mapResponse = await fetchMap(new Request(`http://asset-server${toMapUrl(url)}`)); if (mapResponse?.status === 200) { const map = await mapResponse.text(); asset.mapFile = `${file}.map`; fs.writeFileSync(asset.mapFile, debugId ? addDebugIdToSourceMap(map, debugId) : map); } emitted.push(asset); } return emitted; } function toMapUrl(url) { const queryIndex = url.indexOf("?"); return queryIndex === -1 ? `${url}.map` : `${url.slice(0, queryIndex)}.map${url.slice(queryIndex)}`; } function toRelativePath(url) { const pathname = url.split("?")[0] ?? url; return path.join( ...pathname.replace(/^\//, "").split("/").map((segment) => decodeURIComponent(segment).replace(/[/\\]/g, "_")).filter((segment) => segment !== "..") ); } export { emitAssets }; //# sourceMappingURL=emitAssets.js.map