@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
156 lines • 13.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PathIndex = void 0;
const SourceNodeIndex_1 = require("./SourceNodeIndex");
const BaseModel_1 = require("../BaseModel");
const ModelMap_1 = require("../ModelMap");
const SourceNodeIdentifierHelper_1 = require("../../helper/SourceNodeIdentifierHelper");
const UnifiedPath_1 = require("../../system/UnifiedPath");
const GlobalIdentifier_1 = require("../../system/GlobalIdentifier");
// Types
const types_1 = require("../../types");
class PathIndex extends BaseModel_1.BaseModel {
constructor(identifier, moduleIndex, id) {
super();
this.identifier = identifier;
this.moduleIndex = moduleIndex;
this._id = id;
this.sourceNodeMap = new ModelMap_1.ModelMap('string');
this.reverseSourceNodeMap = new ModelMap_1.ModelMap('number');
}
get containsUncommittedChanges() {
return this._containsUncommittedChanges === undefined ? false : true;
}
set containsUncommittedChanges(v) {
this._containsUncommittedChanges = v === true ? true : undefined;
}
insertToOtherIndex(globalIndex) {
const newModuleIndex = this.moduleIndex.insertToOtherIndex(globalIndex);
return newModuleIndex.getFilePathIndex('upsert', this.identifier);
}
toBuffer() {
throw new Error('PathIndex.toBuffer: not yet implemented');
}
sourceNodeIDs() {
return Array.from(this.reverseSourceNodeMap.keys());
}
addToSourceNodeMap(sourceNodeIndex) {
this.sourceNodeMap.set(sourceNodeIndex.identifier, sourceNodeIndex);
this.reverseSourceNodeMap.set(sourceNodeIndex.id, sourceNodeIndex);
}
set id(id) {
this._id = id;
}
get id() {
return this._id;
}
get pathId() {
return this._id;
}
selfAssignId() {
this.id = this.moduleIndex.globalIndex.newId(this, 'path');
this.moduleIndex.addToPathMap(this);
}
toJSON() {
var _a, _b;
const containsUncommittedChanges = this.containsUncommittedChanges
? { cucc: true }
: {};
return Object.assign({ id: this._id, children: (_a = this.children) === null || _a === void 0 ? void 0 : _a.toJSON(), file: (_b = this.file) === null || _b === void 0 ? void 0 : _b.toJSON() }, containsUncommittedChanges);
}
static fromJSON(json, pathParts, moduleIndex) {
let data;
if (typeof json === 'string') {
data = JSON.parse(json);
}
else {
data = json;
}
let identifier;
if (GlobalIdentifier_1.GlobalIdentifier.isLangInternalPath(pathParts[0])) {
identifier = pathParts.join('/');
}
else {
identifier = UnifiedPath_1.UnifiedPath.fromPathParts(pathParts).toString();
}
const result = new PathIndex(identifier, moduleIndex);
result._id = data.id;
result.containsUncommittedChanges = data.cucc === undefined ? false : true;
if (data.children) {
result.children = new ModelMap_1.ModelMap('string');
for (const key of Object.keys(data.children)) {
result.children.set(key, PathIndex.fromJSON(data.children[key], [...pathParts, key], moduleIndex));
}
}
if (data.file) {
result.file = new ModelMap_1.ModelMap('string');
for (const key of Object.keys(data.file)) {
result.file.set(key, SourceNodeIndex_1.SourceNodeIndex.fromJSON(data.file[key], [key], result, data.file[key].id === undefined
? types_1.SourceNodeIndexType.Intermediate
: types_1.SourceNodeIndexType.SourceNode));
}
}
const id = result._id;
if (id !== undefined) {
moduleIndex.addToPathMap(result);
moduleIndex.globalIndex.setReverseIndex(id, result, 'path');
}
return result;
}
getSourceNodeIndex(indexRequestType, sourceNodeIdentifier) {
const indexFromSourceNodeMap = this.sourceNodeMap.get(sourceNodeIdentifier);
if (indexFromSourceNodeMap !== undefined) {
return indexFromSourceNodeMap;
}
let currentSourceNodeIndex;
let currentSourceNodeMap = this.file;
const sourceNodeIdentifierParts = SourceNodeIdentifierHelper_1.SourceNodeIdentifierHelper.split(sourceNodeIdentifier);
for (let i = 0; i < sourceNodeIdentifierParts.length; i++) {
let sourceNodeIndex = currentSourceNodeMap.get(sourceNodeIdentifierParts[i]);
if (sourceNodeIndex === undefined) {
switch (indexRequestType) {
case 'get':
return undefined;
case 'upsert':
sourceNodeIndex = new SourceNodeIndex_1.SourceNodeIndex(SourceNodeIdentifierHelper_1.SourceNodeIdentifierHelper.join(sourceNodeIdentifierParts.slice(0, i + 1)), this, types_1.SourceNodeIndexType.Intermediate);
currentSourceNodeMap.set(sourceNodeIdentifierParts[i], sourceNodeIndex);
break;
default:
return undefined;
}
}
if (i === sourceNodeIdentifierParts.length - 1) {
if (sourceNodeIndex.id === undefined) {
switch (indexRequestType) {
case 'get':
return undefined;
case 'upsert':
sourceNodeIndex.type = types_1.SourceNodeIndexType.SourceNode;
sourceNodeIndex.selfAssignId();
break;
default:
return undefined;
}
}
currentSourceNodeIndex = sourceNodeIndex;
}
else {
if (sourceNodeIndex.children === undefined) {
switch (indexRequestType) {
case 'get':
return undefined;
case 'upsert':
sourceNodeIndex.children = new ModelMap_1.ModelMap('string');
break;
default:
return undefined;
}
}
currentSourceNodeMap = sourceNodeIndex.children;
}
}
return currentSourceNodeIndex;
}
}
exports.PathIndex = PathIndex;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aEluZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21vZGVsL2luZGljZXMvUGF0aEluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUFtRDtBQUluRCw0Q0FBd0M7QUFDeEMsMENBQXNDO0FBQ3RDLHdGQUFvRjtBQUNwRiwwREFBc0Q7QUFDdEQsb0VBQWdFO0FBQ2hFLFFBQVE7QUFDUix1Q0FZb0I7QUFFcEIsTUFBYSxTQUFVLFNBQVEscUJBQVM7SUFvQnZDLFlBQ0MsVUFBd0QsRUFDeEQsV0FBd0IsRUFDeEIsRUFBa0I7UUFFbEIsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxtQkFBUSxDQUcvQixRQUFRLENBQUMsQ0FBQTtRQUVYLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLG1CQUFRLENBR3RDLFFBQVEsQ0FBQyxDQUFBO0lBQ1osQ0FBQztJQUdELElBQVcsMEJBQTBCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDckUsQ0FBQztJQUVELElBQVcsMEJBQTBCLENBQUMsQ0FBVTtRQUMvQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDakUsQ0FBQztJQUVELGtCQUFrQixDQUFDLFdBQXdCO1FBQzFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDdkUsT0FBTyxjQUFj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