UNPKG

@oaklean/profiler-core

Version:

Part of the @oaklean suite. It provides all basic functions to work with the `.oak` file format. It allows parsing the `.oak` file format as well as tools for analyzing the measurement values. It also provides all necessary capabilities required for prec

99 lines 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UrlProtocolHelper = void 0; const LoggerHelper_1 = require("./LoggerHelper"); const UnifiedPath_1 = require("../system/UnifiedPath"); // Types const UrlProtocolHelper_1 = require("../types/helper/UrlProtocolHelper"); const PROTOCOL_URL_REGEX = /^([^/]+):\/\//; const WEBPACK_URL_REGEX = /(webpack:\/\/|webpack-internal:\/\/\/)(.*?[^/])?\/([^?]*)(?:\?(.*))?$/; // prevent multiple warnings for the same protocol const PROTOCOL_WARNING_TRACKER = new Set(); /** * This helper is used to transform source paths from different protocols to the actual file path. * * E.g. webpack urls are in the format of: * - webpack://[namespace]/[resourcePath]?[options] * - webpack-internal:///[namespace]/[resourcePath]?[options] * * a also common format is: * - file://[path] * */ class UrlProtocolHelper { static extractProtocol(url) { const matches = PROTOCOL_URL_REGEX.exec(url); if (matches && matches.length > 1) { const protocol = matches[1]; if (!UrlProtocolHelper_1.KNOWN_URL_PROTOCOLS.has(protocol) && !PROTOCOL_WARNING_TRACKER.has(protocol)) { PROTOCOL_WARNING_TRACKER.add(protocol); // prevent multiple warnings for the same protocol LoggerHelper_1.LoggerHelper.warn(`UNKNOWN_URL_PROTOCOL_WARNING unknown protocol detected: "${matches[1]}" \n`, 'An unknown protocol was detected, this might lead to unexpected behavior.\n', 'Please report this issue to https://github.com/hitabisgmbh/oaklean/issues'); } return protocol; } return null; } /** * Converts a webpack source map path to the actual file path. * * In sourcemaps the source path is often a webpack url like: * webpack://<module>/<file-path> * * This method converts the webpack url to the actual file path. * * Example: * input: webpack://_N_E/node_modules/next/dist/esm/server/web/adapter.js?4fab * rootDir: /Users/user/project * * result: /Users/user/project/node_modules/next/dist/esm/server/web/adapter.js * */ static webpackSourceMapUrlToOriginalUrl(rootDir, originalSource) { const result = UrlProtocolHelper.parseWebpackSourceUrl(originalSource); if (result === null) { return { url: new UnifiedPath_1.UnifiedPath(originalSource), protocol: null }; } return { url: rootDir.join(result.filePath), protocol: result.protocol }; } /** * Extracts the source path from a webpack internal url with the format: * - webpack://[namespace]/[resourcePath]?[options] * - webpack-internal:///[namespace]/[resourcePath]?[options] * * Returns: * * { * type: 'webpack' | 'webpack-internal', * namespace: string, * filePath: string, * options: string * } * */ static parseWebpackSourceUrl(url) { const matches = WEBPACK_URL_REGEX.exec(url); if (matches && matches.length > 3) { const protocol = matches[1] === 'webpack://' ? 'webpack' : 'webpack-internal'; const namespace = matches[2] || ''; const filePath = matches[3] || ''; const options = matches[4] || ''; return { protocol, namespace, filePath, options }; } return null; } } exports.UrlProtocolHelper = UrlProtocolHelper; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXJsUHJvdG9jb2xIZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGVscGVyL1VybFByb3RvY29sSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE2QztBQUU3Qyx1REFBbUQ7QUFDbkQsUUFBUTtBQUNSLHlFQUcwQztBQUUxQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQTtBQUMxQyxNQUFNLGlCQUFpQixHQUN0Qix1RUFBdUUsQ0FBQTtBQUV4RSxrREFBa0Q7QUFDbEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQTtBQUV4RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFDN0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFXO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQWlCLENBQUE7WUFDM0MsSUFDQyxDQUFDLHVDQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUN0QyxDQUFDO2dCQUNGLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDdEMsa0RBQWtEO2dCQUNsRCwyQkFBWSxDQUFDLElBQUksQ0FDaEIsNERBQTRELE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUM1RSw2RUFBNkUsRUFDN0UsMkVBQTJFLENBQzNFLENBQUE7WUFDRixDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUE7UUFDaEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsTUFBTSxDQUFDLGdDQUFnQyxDQUN0QyxPQUFvQixFQUNwQixjQUFzQjtRQUt0QixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUN0RSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPO2dCQUNOLEdBQUcsRUFBRSxJQUFJLHlCQUFXLENBQUMsY0FBYyxDQUFDO2dCQUNwQyxRQUFRLEVBQUUsSUFBSTthQUNkLENBQUE7UUFDRixDQUFDO1FBRUQsT0FBTztZQUNOLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDbEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQ3pCLENBQUE7SUFDRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBVztRQU12QyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFM0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFFBQVEsR0FDYixPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFBO1lBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDbEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2hDLE9BQU87Z0JBQ04sUUFBUTtnQkFDUixTQUFTO2dCQUNULFFBQVE7Z0JBQ1IsT0FBTzthQUNQLENBQUE7UUFDRixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDWixDQUFDO0NBQ0Q7QUFoR0QsOENBZ0dDIn0=