@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
141 lines • 11.9 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SourceMap = void 0;
const fs = __importStar(require("fs"));
const source_map_1 = require("source-map");
const BaseModel_1 = require("./BaseModel");
const DataUrlUtils_1 = require("../helper/DataUrlUtils");
const UnifiedPath_1 = require("../system/UnifiedPath");
const SOURCE_MAPPING_URL_REGEX = /\/\/# sourceMappingURL=(.*)$/;
const SOURCE_MAP_ATTRIBUTE_NAMES = ['version', 'sources', 'names', 'mappings'];
class SourceMap extends BaseModel_1.BaseModel {
constructor(compiledFileLocation, sourceMapLocation, version, sources, names, mappings) {
super();
this.compiledFileLocation = compiledFileLocation;
this.sourceMapLocation = sourceMapLocation;
this.version = version;
this.sources = sources.map((x) => x.toString());
this.names = names;
this.mappings = mappings;
}
get numberOfLinesInCompiledFile() {
if (this._numberOfLinesInCompiledFile === undefined) {
let maxLine = 0;
this.asConsumer().eachMapping((mapping) => {
if (mapping.generatedLine > maxLine) {
maxLine = mapping.generatedLine;
}
});
this._numberOfLinesInCompiledFile = maxLine;
}
return this._numberOfLinesInCompiledFile;
}
toJSON() {
return {
version: this.version,
sources: this.sources,
names: this.names,
mappings: this.mappings
};
}
static fromJSON(json) {
let data;
if (typeof json === 'string') {
data = JSON.parse(json);
}
else {
data = json;
}
return new SourceMap(new UnifiedPath_1.UnifiedPath(''), new UnifiedPath_1.UnifiedPath(''), data.version, data.sources.map((x) => new UnifiedPath_1.UnifiedPath(x)), data.names, data.mappings);
}
static fromJsonString(s, sourceMapLocation, compiledFileLocation, numberOfLinesInCompiledFile) {
const parsed = JSON.parse(s);
if (SourceMap.isSourceMap(parsed)) {
const { version, sources, names, mappings } = parsed;
return new SourceMap(compiledFileLocation, sourceMapLocation, version, sources.map((sourcePath) => new UnifiedPath_1.UnifiedPath(sourcePath)), names, mappings);
}
}
static isSourceMap(sourceMapCandidate) {
if (!sourceMapCandidate) {
return false;
}
for (const attributeName of SOURCE_MAP_ATTRIBUTE_NAMES) {
if (!(attributeName in sourceMapCandidate)) {
return false;
}
}
return true;
}
static fromCompiledJSString(filePath, sourceCode) {
const match = SOURCE_MAPPING_URL_REGEX.exec(sourceCode);
const numberOfLinesInCompiledFile = (sourceCode.match(/\r\n|\r|\n/g) || []).length;
if (match) {
const sourceMapUrl = match[1];
if (DataUrlUtils_1.DataUrlUtils.isDataUrl(sourceMapUrl)) {
// inline source map
const data = DataUrlUtils_1.DataUrlUtils.parseDataUrl(sourceMapUrl);
return SourceMap.fromJsonString(data, filePath, filePath, numberOfLinesInCompiledFile);
}
else {
// source map file
const directoryPath = filePath.dirName();
const sourceMapLocation = directoryPath.join(sourceMapUrl);
if (fs.existsSync(sourceMapLocation.toString())) {
const data = fs.readFileSync(sourceMapLocation.toString(), { encoding: 'utf-8' });
return SourceMap.fromJsonString(data, sourceMapLocation, filePath, numberOfLinesInCompiledFile);
}
}
}
}
static fromCompiledJSFile(filePath) {
if (!fs.existsSync(filePath.toPlatformString())) {
return undefined;
}
const sourceCode = fs.readFileSync(filePath.toPlatformString(), { encoding: 'utf-8' });
return SourceMap.fromCompiledJSString(filePath, sourceCode);
}
asConsumer() {
if (!this._consumer) {
this._consumer = new source_map_1.SourceMapConsumer(this);
}
return this._consumer;
}
getOriginalSourceLocation(lineNumber, columnNumber) {
// sourcemap expects 1-based line and column
const line = lineNumber + 1;
const column = columnNumber + 1;
let originalPosition = this.asConsumer().originalPositionFor({ line, column });
// if the source is not properly set we need to skip the lines without a mapping
// (e.g. "use strict" at the beginning of a file)
let offset = 1;
while (!originalPosition.source && line + offset < this.numberOfLinesInCompiledFile + 1) {
originalPosition = this.asConsumer().originalPositionFor({ line: line + offset++, column: column });
}
return originalPosition;
}
}
exports.SourceMap = SourceMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291cmNlTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL1NvdXJjZU1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUV4QiwyQ0FBNEU7QUFFNUUsMkNBQXVDO0FBRXZDLHlEQUFxRDtBQUNyRCx1REFBbUQ7QUFFbkQsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQTtBQUMvRCxNQUFNLDBCQUEwQixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7QUFTOUUsTUFBYSxTQUFVLFNBQVEscUJBQVM7SUFZdkMsWUFDQyxvQkFBaUMsRUFDakMsaUJBQThCLEVBQzlCLE9BQWUsRUFDZixPQUFzQixFQUN0QixLQUFlLEVBQ2YsUUFBZ0I7UUFFaEIsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDekIsQ0FBQztJQUVELElBQVcsMkJBQTJCO1FBQ3JDLElBQUksSUFBSSxDQUFDLDRCQUE0QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQTtZQUNmLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFD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