@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
JavaScript
;
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=