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

141 lines 11.9 kB
"use strict"; 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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