@sentry/remix
Version:
Official Sentry SDK for Remix
46 lines (42 loc) • 1.8 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const fs = require('node:fs');
const path = require('node:path');
const assetServer = require('./assetServer.js');
const debugId = require('./debugId.js');
async function emitAssets(options) {
const { assets, entries, outDir } = options;
const fetchMap = assets[assetServer.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$1 = 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: debugId$1 };
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$1 ? debugId.addDebugIdToSourceMap(map, debugId$1) : 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 !== "..")
);
}
exports.emitAssets = emitAssets;
//# sourceMappingURL=emitAssets.js.map