ts2famix 2.1.0-beta.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +24 -24
- package/LICENSE +24 -24
- package/README.md +78 -78
- package/dist/analyze.js +3 -3
- package/dist/analyze_functions/process_functions.js +92 -62
- package/dist/famix_functions/EntityDictionary.js +674 -599
- package/dist/famix_functions/helpers_creation.js +18 -12
- package/dist/fqn.js +351 -18
- package/dist/lib/famix/famix_JSON_exporter.js +1 -1
- package/dist/lib/famix/famix_base_element.js +1 -1
- package/dist/lib/famix/famix_repository.js +14 -5
- package/dist/lib/famix/index.js +1 -1
- package/dist/lib/famix/model/famix/access.js +1 -1
- package/dist/lib/famix/model/famix/accessor.js +1 -1
- package/dist/lib/famix/model/famix/alias.js +1 -1
- package/dist/lib/famix/model/famix/arrow_function.js +1 -1
- package/dist/lib/famix/model/famix/behavioral_entity.js +1 -1
- package/dist/lib/famix/model/famix/class.js +1 -1
- package/dist/lib/famix/model/famix/comment.js +1 -1
- package/dist/lib/famix/model/famix/concretisation.js +1 -1
- package/dist/lib/famix/model/famix/container_entity.js +1 -1
- package/dist/lib/famix/model/famix/decorator.js +1 -1
- package/dist/lib/famix/model/famix/entity.js +1 -1
- package/dist/lib/famix/model/famix/enum.js +1 -1
- package/dist/lib/famix/model/famix/enum_value.js +1 -1
- package/dist/lib/famix/model/famix/function.js +1 -1
- package/dist/lib/famix/model/famix/import_clause.js +1 -1
- package/dist/lib/famix/model/famix/index.js +1 -1
- package/dist/lib/famix/model/famix/indexed_file_anchor.js +1 -1
- package/dist/lib/famix/model/famix/inheritance.js +1 -1
- package/dist/lib/famix/model/famix/interface.js +1 -1
- package/dist/lib/famix/model/famix/invocation.js +1 -1
- package/dist/lib/famix/model/famix/method.js +1 -1
- package/dist/lib/famix/model/famix/module.js +2 -2
- package/dist/lib/famix/model/famix/named_entity.js +1 -1
- package/dist/lib/famix/model/famix/parameter.js +1 -1
- package/dist/lib/famix/model/famix/parameter_concretisation.js +1 -1
- package/dist/lib/famix/model/famix/parameter_type.js +1 -1
- package/dist/lib/famix/model/famix/parametric_arrow_function.js +1 -1
- package/dist/lib/famix/model/famix/parametric_class.js +1 -1
- package/dist/lib/famix/model/famix/parametric_function.js +1 -1
- package/dist/lib/famix/model/famix/parametric_interface.js +1 -1
- package/dist/lib/famix/model/famix/parametric_method.js +1 -1
- package/dist/lib/famix/model/famix/primitive_type.js +1 -1
- package/dist/lib/famix/model/famix/property.js +1 -1
- package/dist/lib/famix/model/famix/reference.js +1 -1
- package/dist/lib/famix/model/famix/scoping_entity.js +1 -1
- package/dist/lib/famix/model/famix/script_entity.js +1 -1
- package/dist/lib/famix/model/famix/source_anchor.js +1 -1
- package/dist/lib/famix/model/famix/source_language.js +1 -1
- package/dist/lib/famix/model/famix/sourced_entity.js +1 -1
- package/dist/lib/famix/model/famix/structural_entity.js +1 -1
- package/dist/lib/famix/model/famix/type.js +1 -1
- package/dist/lib/famix/model/famix/variable.js +1 -1
- package/dist/lib/ts-complex/cyclomatic-service.js +1 -1
- package/dist/refactorer/refactor-getter-setter.js +1 -1
- package/dist/ts2famix-cli-wrapper.js +1 -1
- package/dist/ts2famix-cli.js +3 -1
- package/doc-uml/famix-typescript-model.puml +619 -607
- package/doc-uml/famix-typescript-model.svg +1 -1
- package/eslint.config.mjs +28 -28
- package/jest.config.json +1 -1
- package/package.json +70 -70
- package/src/analyze.ts +120 -120
- package/src/analyze_functions/process_functions.ts +1069 -1040
- package/src/famix_functions/EntityDictionary.ts +2061 -2016
- package/src/famix_functions/helpers_creation.ts +143 -135
- package/src/fqn.ts +416 -50
- package/src/generate_uml.sh +20 -20
- package/src/lib/famix/License.md +22 -22
- package/src/lib/famix/famix_JSON_exporter.ts +56 -56
- package/src/lib/famix/famix_base_element.ts +22 -22
- package/src/lib/famix/famix_repository.ts +288 -278
- package/src/lib/famix/index.ts +8 -8
- package/src/lib/famix/model/famix/access.ts +50 -50
- package/src/lib/famix/model/famix/accessor.ts +15 -15
- package/src/lib/famix/model/famix/alias.ts +39 -39
- package/src/lib/famix/model/famix/arrow_function.ts +15 -15
- package/src/lib/famix/model/famix/behavioral_entity.ts +97 -97
- package/src/lib/famix/model/famix/class.ts +85 -85
- package/src/lib/famix/model/famix/comment.ts +47 -47
- package/src/lib/famix/model/famix/concretisation.ts +40 -40
- package/src/lib/famix/model/famix/container_entity.ts +160 -160
- package/src/lib/famix/model/famix/decorator.ts +37 -37
- package/src/lib/famix/model/famix/entity.ts +15 -15
- package/src/lib/famix/model/famix/enum.ts +30 -30
- package/src/lib/famix/model/famix/enum_value.ts +28 -28
- package/src/lib/famix/model/famix/function.ts +15 -15
- package/src/lib/famix/model/famix/import_clause.ts +51 -51
- package/src/lib/famix/model/famix/index.ts +41 -41
- package/src/lib/famix/model/famix/indexed_file_anchor.ts +46 -46
- package/src/lib/famix/model/famix/inheritance.ts +40 -40
- package/src/lib/famix/model/famix/interface.ts +75 -75
- package/src/lib/famix/model/famix/invocation.ts +65 -65
- package/src/lib/famix/model/famix/method.ts +89 -89
- package/src/lib/famix/model/famix/module.ts +71 -71
- package/src/lib/famix/model/famix/named_entity.ts +95 -95
- package/src/lib/famix/model/famix/parameter.ts +28 -28
- package/src/lib/famix/model/famix/parameter_concretisation.ts +51 -51
- package/src/lib/famix/model/famix/parameter_type.ts +58 -58
- package/src/lib/famix/model/famix/parametric_arrow_function.ts +32 -32
- package/src/lib/famix/model/famix/parametric_class.ts +49 -49
- package/src/lib/famix/model/famix/parametric_function.ts +32 -32
- package/src/lib/famix/model/famix/parametric_interface.ts +49 -49
- package/src/lib/famix/model/famix/parametric_method.ts +32 -32
- package/src/lib/famix/model/famix/primitive_type.ts +15 -15
- package/src/lib/famix/model/famix/property.ts +94 -94
- package/src/lib/famix/model/famix/reference.ts +40 -40
- package/src/lib/famix/model/famix/scoping_entity.ts +35 -35
- package/src/lib/famix/model/famix/script_entity.ts +34 -34
- package/src/lib/famix/model/famix/source_anchor.ts +30 -30
- package/src/lib/famix/model/famix/source_language.ts +35 -35
- package/src/lib/famix/model/famix/sourced_entity.ts +70 -70
- package/src/lib/famix/model/famix/structural_entity.ts +43 -43
- package/src/lib/famix/model/famix/type.ts +87 -87
- package/src/lib/famix/model/famix/variable.ts +27 -27
- package/src/lib/famix/package.json +28 -28
- package/src/lib/ts-complex/cyclomatic-service.ts +83 -83
- package/src/refactorer/refactor-getter-setter.ts +140 -140
- package/src/ts2famix-cli-wrapper.ts +21 -21
- package/src/ts2famix-cli.ts +62 -60
- package/tsconfig.check-tests.json +14 -14
- package/tsconfig.json +73 -72
- package/.vscode/settings.json +0 -4
- package/TODO +0 -1
- package/arwea-fix.json +0 -1
- package/bogus.ts +0 -3
- package/class-diagram.puml +0 -792
- package/debug.txt +0 -13332
- package/debuglog.txt +0 -12073
- package/dist/famix2puml.js +0 -126
- package/dist/getClasses-arrow-body.js +0 -43
- package/dist/lib/famix/src/famix_JSON_exporter.js +0 -55
- package/dist/lib/famix/src/famix_base_element.js +0 -18
- package/dist/lib/famix/src/famix_repository.js +0 -224
- package/dist/lib/famix/src/index.js +0 -31
- package/dist/lib/famix/src/model/famix/access.js +0 -40
- package/dist/lib/famix/src/model/famix/accessor.js +0 -17
- package/dist/lib/famix/src/model/famix/alias.js +0 -33
- package/dist/lib/famix/src/model/famix/arrowFunction.js +0 -17
- package/dist/lib/famix/src/model/famix/arrow_function.js +0 -17
- package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -79
- package/dist/lib/famix/src/model/famix/class.js +0 -71
- package/dist/lib/famix/src/model/famix/comment.js +0 -39
- package/dist/lib/famix/src/model/famix/concretisation.js +0 -31
- package/dist/lib/famix/src/model/famix/container_entity.js +0 -126
- package/dist/lib/famix/src/model/famix/decorator.js +0 -32
- package/dist/lib/famix/src/model/famix/entity.js +0 -17
- package/dist/lib/famix/src/model/famix/enum.js +0 -31
- package/dist/lib/famix/src/model/famix/enum_value.js +0 -25
- package/dist/lib/famix/src/model/famix/function.js +0 -17
- package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -17
- package/dist/lib/famix/src/model/famix/import_clause.js +0 -41
- package/dist/lib/famix/src/model/famix/index.js +0 -86
- package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -38
- package/dist/lib/famix/src/model/famix/inheritance.js +0 -33
- package/dist/lib/famix/src/model/famix/interface.js +0 -64
- package/dist/lib/famix/src/model/famix/invocation.js +0 -54
- package/dist/lib/famix/src/model/famix/method.js +0 -67
- package/dist/lib/famix/src/model/famix/module.js +0 -60
- package/dist/lib/famix/src/model/famix/named_entity.js +0 -78
- package/dist/lib/famix/src/model/famix/parameter.js +0 -25
- package/dist/lib/famix/src/model/famix/parameterConcretisation.js +0 -44
- package/dist/lib/famix/src/model/famix/parameter_concretisation.js +0 -44
- package/dist/lib/famix/src/model/famix/parameter_type.js +0 -45
- package/dist/lib/famix/src/model/famix/parametricArrowFunction.js +0 -29
- package/dist/lib/famix/src/model/famix/parametric_arrow_function.js +0 -31
- package/dist/lib/famix/src/model/famix/parametric_class.js +0 -44
- package/dist/lib/famix/src/model/famix/parametric_function.js +0 -31
- package/dist/lib/famix/src/model/famix/parametric_interface.js +0 -44
- package/dist/lib/famix/src/model/famix/parametric_method.js +0 -31
- package/dist/lib/famix/src/model/famix/primitive_type.js +0 -17
- package/dist/lib/famix/src/model/famix/property.js +0 -73
- package/dist/lib/famix/src/model/famix/reference.js +0 -33
- package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -36
- package/dist/lib/famix/src/model/famix/script_entity.js +0 -29
- package/dist/lib/famix/src/model/famix/source_anchor.js +0 -27
- package/dist/lib/famix/src/model/famix/source_language.js +0 -35
- package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -60
- package/dist/lib/famix/src/model/famix/structural_entity.js +0 -39
- package/dist/lib/famix/src/model/famix/text_anchor.js +0 -38
- package/dist/lib/famix/src/model/famix/type.js +0 -73
- package/dist/lib/famix/src/model/famix/variable.js +0 -24
- package/fqn-model.json +0 -1
- package/iterateGenericTypes.ts +0 -69
- package/out/class-diagram/class-diagram.svg +0 -1
- package/sample.json +0 -1
- package/sample.ts +0 -1
- package/stats.txt +0 -3091
- package/tabby-debug-output.txt +0 -19433
- package/ts2famix.log +0 -22656
- package/validate-references.js +0 -103
package/dist/famix2puml.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const fs = __importStar(require("fs"));
|
|
30
|
-
const yargs_1 = __importDefault(require("yargs"));
|
|
31
|
-
const argv = yargs_1.default
|
|
32
|
-
.example('ts-node src/famix2puml.ts -i JSONModels/projectName.json -o PUMLModels/projectName.puml', 'creates a PlantUML class diagram from a JSON-format model of a typescript project')
|
|
33
|
-
.alias('i', 'input')
|
|
34
|
-
.nargs('i', 1)
|
|
35
|
-
.alias('o', 'output')
|
|
36
|
-
.nargs('o', 1)
|
|
37
|
-
.demandOption('input').demandOption('output').parseSync();
|
|
38
|
-
const INHERITANCE_LINK_COLOR = 'blue';
|
|
39
|
-
const jsonFileName = argv.input;
|
|
40
|
-
const pumlFileName = argv.output.substring(argv.output.indexOf("/") + 1, argv.output.lastIndexOf('.'));
|
|
41
|
-
const parsedModel = JSON.parse(fs.readFileSync(jsonFileName, 'utf-8'));
|
|
42
|
-
const classNameMap = new Map();
|
|
43
|
-
const associations = new Array();
|
|
44
|
-
// maps all class names to their id
|
|
45
|
-
parsedModel.forEach(element => {
|
|
46
|
-
// map has id as key and unique (plantuml) class name
|
|
47
|
-
classNameMap.set(element.id, uniqueElementName(element));
|
|
48
|
-
const nameWithoutPrefix = element.FM3.split('.')[1];
|
|
49
|
-
// special case association
|
|
50
|
-
if (nameWithoutPrefix.endsWith('Inheritance')) {
|
|
51
|
-
const subclass = element['subclass'].ref;
|
|
52
|
-
const superclass = element['superclass'].ref;
|
|
53
|
-
associations.push({ from: subclass, to: superclass, name: nameWithoutPrefix });
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
// generates plantuml
|
|
57
|
-
let plantUMLOutString = `@startuml ${pumlFileName}
|
|
58
|
-
skinparam style strictuml
|
|
59
|
-
title Object diagram for ${jsonFileName}
|
|
60
|
-
`;
|
|
61
|
-
parsedModel.forEach(element => {
|
|
62
|
-
plantUMLOutString += `${toPlantUML(element)}\n`;
|
|
63
|
-
});
|
|
64
|
-
// creates associations
|
|
65
|
-
associations.forEach(association => {
|
|
66
|
-
// inheritance is a special case, show it in UML even though it doesn't make 100% sense in object diagrams
|
|
67
|
-
const isInheritance = association.name.startsWith('Inheritance');
|
|
68
|
-
if (isInheritance) {
|
|
69
|
-
plantUMLOutString += `${classNameMap.get(association.from)} --|> ${classNameMap.get(association.to)} #line:${INHERITANCE_LINK_COLOR}\n`;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
plantUMLOutString += `${classNameMap.get(association.from)} ..> "${association.name}" ${classNameMap.get(association.to)}\n`;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
plantUMLOutString += '@enduml';
|
|
76
|
-
// writes to output file
|
|
77
|
-
fs.writeFile(argv.output, plantUMLOutString, (err) => {
|
|
78
|
-
if (err) {
|
|
79
|
-
throw err;
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
function uniqueElementName(element) {
|
|
83
|
-
return `${element.FM3}${element.id}`;
|
|
84
|
-
}
|
|
85
|
-
function toPlantUML(element) {
|
|
86
|
-
let plantUMLString = '';
|
|
87
|
-
const optionalName = element.name || '';
|
|
88
|
-
const nameWithoutPrefix = element.FM3.split('.')[1];
|
|
89
|
-
plantUMLString += `object "${optionalName}:${nameWithoutPrefix}" as ${uniqueElementName(element)} {\n`;
|
|
90
|
-
plantUMLString += `id = ${element.id}\n`;
|
|
91
|
-
plantUMLString += propertiesToPlantUML(element);
|
|
92
|
-
plantUMLString += '}\n';
|
|
93
|
-
return plantUMLString;
|
|
94
|
-
}
|
|
95
|
-
function propertiesToPlantUML(element) {
|
|
96
|
-
let plantUMLString = '';
|
|
97
|
-
for (const property in element) {
|
|
98
|
-
const attribute = element[property];
|
|
99
|
-
const isOneToManyReference = typeof attribute !== 'string' && attribute.length; // array but not a string
|
|
100
|
-
switch (property) {
|
|
101
|
-
// ignores these properties
|
|
102
|
-
case 'subclass':
|
|
103
|
-
case 'superclass':
|
|
104
|
-
case 'FM3':
|
|
105
|
-
case 'id':
|
|
106
|
-
case 'name':
|
|
107
|
-
break;
|
|
108
|
-
default:
|
|
109
|
-
if (isOneToManyReference) {
|
|
110
|
-
attribute.forEach((composite, index) => {
|
|
111
|
-
associations.push({ from: element.id, to: composite.ref, name: `${property}[${index}]` });
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
else if (typeof attribute === 'object') {
|
|
115
|
-
associations.push({ from: element.id, to: attribute.ref, name: property });
|
|
116
|
-
}
|
|
117
|
-
else { // typeof string, boolean, number, etc
|
|
118
|
-
// treats it as a simple attribute
|
|
119
|
-
plantUMLString += `${property} = ${element[property]}\n`;
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return plantUMLString;
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaXgycHVtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYW1peDJwdW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsa0RBQTBCO0FBRTFCLE1BQU0sSUFBSSxHQUFHLGVBQUs7S0FDYixPQUFPLENBQUMseUZBQXlGLEVBQUUsbUZBQW1GLENBQUM7S0FDdkwsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7S0FDbkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDYixLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztLQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUNiLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFFOUQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUM7QUFldEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQWUsQ0FBQztBQUMxQyxNQUFNLFlBQVksR0FBSSxJQUFJLENBQUMsTUFBaUIsQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLE1BQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsRUFBRyxJQUFJLENBQUMsTUFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6SSxNQUFNLFdBQVcsR0FBa0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7QUFFOUMsbUNBQW1DO0FBQ25DLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVB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LGtDQUFrQztvQkFDbEMsY0FBYyxJQUFJLEdBQUcsUUFBUSxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUM3RCxDQUFDO2dCQUVELE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCB5YXJncyBmcm9tICd5YXJncyc7XHJcblxyXG5jb25zdCBhcmd2ID0geWFyZ3NcclxuICAgIC5leGFtcGxlKCd0cy1ub2RlIHNyYy9mYW1peDJwdW1sLnRzIC1pIEpTT05Nb2RlbHMvcHJvamVjdE5hbWUuanNvbiAtbyBQVU1MTW9kZWxzL3Byb2plY3ROYW1lLnB1bWwnLCAnY3JlYXRlcyBhIFBsYW50VU1MIGNsYXNzIGRpYWdyYW0gZnJvbSBhIEpTT04tZm9ybWF0IG1vZGVsIG9mIGEgdHlwZXNjcmlwdCBwcm9qZWN0JylcclxuICAgIC5hbGlhcygnaScsICdpbnB1dCcpXHJcbiAgICAubmFyZ3MoJ2knLCAxKVxyXG4gICAgLmFsaWFzKCdvJywgJ291dHB1dCcpXHJcbiAgICAubmFyZ3MoJ28nLCAxKVxyXG4gICAgLmRlbWFuZE9wdGlvbignaW5wdXQnKS5kZW1hbmRPcHRpb24oJ291dHB1dCcpLnBhcnNlU3luYygpO1xyXG5cclxuY29uc3QgSU5IRVJJVEFOQ0VfTElOS19DT0xPUiA9ICdibHVlJztcclxuXHJcbi8vIGFwcHJveGltYXRpb24gZm9yIGNvZGUgY29tcGxldGlvblxyXG5pbnRlcmZhY2UgRmFtaXhUeXBlU2NyaXB0RWxlbWVudCB7XHJcbiAgICBGTTM6IHN0cmluZ1xyXG4gICAgbmFtZTogc3RyaW5nXHJcbiAgICBpZD86IHN0cmluZ1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXNzb2NpYXRpb24ge1xyXG4gICAgZnJvbTogc3RyaW5nO1xyXG4gICAgdG86IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QganNvbkZpbGVOYW1lID0gYXJndi5pbnB1dCBhcyBzdHJpbmc7XHJcbmNvbnN0IHB1bWxGaWxlTmFtZSA9IChhcmd2Lm91dHB1dCBhcyBzdHJpbmcpLnN1YnN0cmluZygoYXJndi5vdXRwdXQgYXMgc3RyaW5nKS5pbmRleE9mKFwiL1wiKSsxLCAoYXJndi5vdXRwdXQgYXMgc3RyaW5nKS5sYXN0SW5kZXhPZignLicpKTtcclxuY29uc3QgcGFyc2VkTW9kZWw6IEFycmF5PEZhbWl4VHlwZVNjcmlwdEVsZW1lbnQ+ID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVOYW1lLCAndXRmLTgnKSk7XHJcbmNvbnN0IGNsYXNzTmFtZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbmNvbnN0IGFzc29jaWF0aW9ucyA9IG5ldyBBcnJheTxBc3NvY2lhdGlvbj4oKTtcclxuXHJcbi8vIG1hcHMgYWxsIGNsYXNzIG5hbWVzIHRvIHRoZWlyIGlkXHJcbnBhcnNlZE1vZGVsLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAvLyBtYXAgaGFzIGlkIGFzIGtleSBhbmQgdW5pcXVlIChwbGFudHVtbCkgY2xhc3MgbmFtZVxyXG4gICAgY2xhc3NOYW1lTWFwLnNldChlbGVtZW50LmlkLCB1bmlxdWVFbGVtZW50TmFtZShlbGVtZW50KSk7XHJcbiAgICBjb25zdCBuYW1lV2l0aG91dFByZWZpeCA9IGVsZW1lbnQuRk0zLnNwbGl0KCcuJylbMV07XHJcbiAgICAvLyBzcGVjaWFsIGNhc2UgYXNzb2NpYXRpb25cclxuICAgIGlmIChuYW1lV2l0aG91dFByZWZpeC5lbmRzV2l0aCgnSW5oZXJpdGFuY2UnKSkge1xyXG4gICAgICAgIGNvbnN0IHN1YmNsYXNzID0gZWxlbWVudFsnc3ViY2xhc3MnXS5yZWY7XHJcbiAgICAgICAgY29uc3Qgc3VwZXJjbGFzcyA9IGVsZW1lbnRbJ3N1cGVyY2xhc3MnXS5yZWY7XHJcbiAgICAgICAgYXNzb2NpYXRpb25zLnB1c2goeyBmcm9tOiBzdWJjbGFzcywgdG86IHN1cGVyY2xhc3MsIG5hbWU6IG5hbWVXaXRob3V0UHJlZml4IH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIGdlbmVyYXRlcyBwbGFudHVtbFxyXG5sZXQgcGxhbnRVTUxPdXRTdHJpbmcgPSBgQHN0YXJ0dW1sICR7cHVtbEZpbGVOYW1lfVxyXG5za2lucGFyYW0gc3R5bGUgc3RyaWN0dW1sXHJcbnRpdGxlIE9iamVjdCBkaWFncmFtIGZvciAke2pzb25GaWxlTmFtZX1cclxuYDtcclxucGFyc2VkTW9kZWwuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgIHBsYW50VU1MT3V0U3RyaW5nICs9IGAke3RvUGxhbnRVTUwoZWxlbWVudCl9XFxuYDtcclxufSk7XHJcblxyXG4vLyBjcmVhdGVzIGFzc29jaWF0aW9uc1xyXG5hc3NvY2lhdGlvbnMuZm9yRWFjaChhc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAvLyBpbmhlcml0YW5jZSBpcyBhIHNwZWNpYWwgY2FzZSwgc2hvdyBpdCBpbiBVTUwgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBtYWtlIDEwMCUgc2Vuc2UgaW4gb2JqZWN0IGRpYWdyYW1zXHJcbiAgICBjb25zdCBpc0luaGVyaXRhbmNlID0gYXNzb2NpYXRpb24ubmFtZS5zdGFydHNXaXRoKCdJbmhlcml0YW5jZScpO1xyXG4gICAgaWYgKGlzSW5oZXJpdGFuY2UpIHtcclxuICAgICAgICBwbGFudFVNTE91dFN0cmluZyArPSBgJHtjbGFzc05hbWVNYXAuZ2V0KGFzc29jaWF0aW9uLmZyb20pfSAtLXw+ICR7Y2xhc3NOYW1lTWFwLmdldChhc3NvY2lhdGlvbi50byl9ICNsaW5lOiR7SU5IRVJJVEFOQ0VfTElOS19DT0xPUn1cXG5gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwbGFudFVNTE91dFN0cmluZyArPSBgJHtjbGFzc05hbWVNYXAuZ2V0KGFzc29jaWF0aW9uLmZyb20pfSAuLj4gXCIke2Fzc29jaWF0aW9uLm5hbWV9XCIgJHtjbGFzc05hbWVNYXAuZ2V0KGFzc29jaWF0aW9uLnRvKX1cXG5gO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbnBsYW50VU1MT3V0U3RyaW5nICs9ICdAZW5kdW1sJztcclxuXHJcbi8vIHdyaXRlcyB0byBvdXRwdXQgZmlsZVxyXG5mcy53cml0ZUZpbGUoYXJndi5vdXRwdXQgYXMgc3RyaW5nLCBwbGFudFVNTE91dFN0cmluZywgKGVycikgPT4ge1xyXG4gICAgaWYgKGVycikgeyB0aHJvdyBlcnI7IH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiB1bmlxdWVFbGVtZW50TmFtZShlbGVtZW50OiBGYW1peFR5cGVTY3JpcHRFbGVtZW50KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHtlbGVtZW50LkZNM30ke2VsZW1lbnQuaWR9YDtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9QbGFudFVNTChlbGVtZW50OiBGYW1peFR5cGVTY3JpcHRFbGVtZW50KSB7XHJcbiAgICBsZXQgcGxhbnRVTUxTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IG9wdGlvbmFsTmFtZSA9IGVsZW1lbnQubmFtZSB8fCAnJztcclxuICAgIGNvbnN0IG5hbWVXaXRob3V0UHJlZml4ID0gZWxlbWVudC5GTTMuc3BsaXQoJy4nKVsxXTtcclxuICAgIHBsYW50VU1MU3RyaW5nICs9IGBvYmplY3QgXCIke29wdGlvbmFsTmFtZX06JHtuYW1lV2l0aG91dFByZWZpeH1cIiBhcyAke3VuaXF1ZUVsZW1lbnROYW1lKGVsZW1lbnQpfSB7XFxuYDtcclxuICAgIHBsYW50VU1MU3RyaW5nICs9IGBpZCA9ICR7ZWxlbWVudC5pZH1cXG5gO1xyXG4gICAgcGxhbnRVTUxTdHJpbmcgKz0gcHJvcGVydGllc1RvUGxhbnRVTUwoZWxlbWVudCk7XHJcbiAgICBwbGFudFVNTFN0cmluZyArPSAnfVxcbic7XHJcbiAgICByZXR1cm4gcGxhbnRVTUxTdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb3BlcnRpZXNUb1BsYW50VU1MKGVsZW1lbnQ6IEZhbWl4VHlwZVNjcmlwdEVsZW1lbnQpIHtcclxuICAgIGxldCBwbGFudFVNTFN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZWxlbWVudFtwcm9wZXJ0eV07XHJcbiAgICAgICAgY29uc3QgaXNPbmVUb01hbnlSZWZlcmVuY2UgPSB0eXBlb2YgYXR0cmlidXRlICE9PSAnc3RyaW5nJyAmJiBhdHRyaWJ1dGUubGVuZ3RoOyAvLyBhcnJheSBidXQgbm90IGEgc3RyaW5nXHJcblxyXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlcyB0aGVzZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNhc2UgJ3N1YmNsYXNzJzpcclxuICAgICAgICAgICAgY2FzZSAnc3VwZXJjbGFzcyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ0ZNMyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2lkJzpcclxuICAgICAgICAgICAgY2FzZSAnbmFtZSc6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPbmVUb01hbnlSZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuZm9yRWFjaCgoY29tcG9zaXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGZyb206IGVsZW1lbnQuaWQsIHRvOiBjb21wb3NpdGUucmVmLCBuYW1lOiBgJHtwcm9wZXJ0eX1bJHtpbmRleH1dYCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF0dHJpYnV0ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGZyb206IGVsZW1lbnQuaWQsIHRvOiBhdHRyaWJ1dGUucmVmLCBuYW1lOiBwcm9wZXJ0eSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAvLyB0eXBlb2Ygc3RyaW5nLCBib29sZWFuLCBudW1iZXIsIGV0Y1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyZWF0cyBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAgICAgICBwbGFudFVNTFN0cmluZyArPSBgJHtwcm9wZXJ0eX0gPSAke2VsZW1lbnRbcHJvcGVydHldfVxcbmA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsYW50VU1MU3RyaW5nO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const ts_morph_1 = require("ts-morph");
|
|
4
|
-
// Initialize the project
|
|
5
|
-
const project = new ts_morph_1.Project({
|
|
6
|
-
useInMemoryFileSystem: true,
|
|
7
|
-
compilerOptions: {
|
|
8
|
-
target: 2, // ES6
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
// Create a source file with a class inside an arrow function
|
|
12
|
-
const sourceFile = project.createSourceFile("test.ts", `
|
|
13
|
-
class A {}
|
|
14
|
-
const myFunction = () => {
|
|
15
|
-
class User {
|
|
16
|
-
constructor(public name: string) {}
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
`);
|
|
20
|
-
// write getArrowFunctionClasses(f) that returns the classes declared in the body of an arrow function by traversing the AST
|
|
21
|
-
// Function to get classes declared inside arrow functions
|
|
22
|
-
function getArrowFunctionClasses(f) {
|
|
23
|
-
const classes = [];
|
|
24
|
-
function findClasses(node) {
|
|
25
|
-
if (node.getKind() === ts_morph_1.SyntaxKind.ClassDeclaration) {
|
|
26
|
-
classes.push(node);
|
|
27
|
-
}
|
|
28
|
-
node.getChildren().forEach(findClasses);
|
|
29
|
-
}
|
|
30
|
-
findClasses(f);
|
|
31
|
-
return classes;
|
|
32
|
-
}
|
|
33
|
-
// Get the classes using getClasses()
|
|
34
|
-
const classes = sourceFile.getClasses();
|
|
35
|
-
const arrowFunctions = sourceFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.ArrowFunction);
|
|
36
|
-
console.log("Arrow functions found:", arrowFunctions.map(f => f.getText()));
|
|
37
|
-
// find the classes declared in bodies of ArrowFunctions
|
|
38
|
-
// can't use getClasses() because it only returns classes declared in the source file
|
|
39
|
-
const classesInArrowFunctions = arrowFunctions.map(f => getArrowFunctionClasses(f)).flat();
|
|
40
|
-
// Log the results
|
|
41
|
-
console.log("Classes found:", classes.map(cls => cls.getName()));
|
|
42
|
-
console.log("Classes found in arrow functions:", classesInArrowFunctions.map(cls => cls.getName()));
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q2xhc3Nlcy1hcnJvdy1ib2R5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dldENsYXNzZXMtYXJyb3ctYm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUFnRjtBQUVoRix5QkFBeUI7QUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxDQUFDO0lBQ3hCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsZUFBZSxFQUFFO1FBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNO0tBQ3BCO0NBQ0osQ0FBQyxDQUFDO0FBRUgsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7Ozs7Ozs7Q0FPdEQsQ0FBQyxDQUFDO0FBRUgsNEhBQTRIO0FBQzVILDBEQUEwRDtBQUMxRCxTQUFTLHVCQUF1QixDQUFDLENBQWdCO0lBQzdDLE1BQU0sT0FBTyxHQUF1QixFQUFFLENBQUM7SUFFdkMsU0FBUyxXQUFXLENBQUMsSUFBUztRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxxQkFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUF3QixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFHRCxxQ0FBcUM7QUFDckMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRXhDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRWpGLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFNUUsd0RBQXdEO0FBQ3hELHFGQUFxRjtBQUNyRixNQUFNLHVCQUF1QixHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTNGLGtCQUFrQjtBQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUUsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFycm93RnVuY3Rpb24sIENsYXNzRGVjbGFyYXRpb24sIFByb2plY3QsIFN5bnRheEtpbmQgfSBmcm9tIFwidHMtbW9ycGhcIjtcclxuXHJcbi8vIEluaXRpYWxpemUgdGhlIHByb2plY3RcclxuY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcclxuICAgIHVzZUluTWVtb3J5RmlsZVN5c3RlbTogdHJ1ZSxcclxuICAgIGNvbXBpbGVyT3B0aW9uczoge1xyXG4gICAgICAgIHRhcmdldDogMiwgLy8gRVM2XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLy8gQ3JlYXRlIGEgc291cmNlIGZpbGUgd2l0aCBhIGNsYXNzIGluc2lkZSBhbiBhcnJvdyBmdW5jdGlvblxyXG5jb25zdCBzb3VyY2VGaWxlID0gcHJvamVjdC5jcmVhdGVTb3VyY2VGaWxlKFwidGVzdC50c1wiLCBgXHJcbmNsYXNzIEEge31cclxuY29uc3QgbXlGdW5jdGlvbiA9ICgpID0+IHtcclxuICAgIGNsYXNzIFVzZXIge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHt9XHJcbiAgICB9XHJcbn07XHJcbmApO1xyXG5cclxuLy8gd3JpdGUgZ2V0QXJyb3dGdW5jdGlvbkNsYXNzZXMoZikgdGhhdCByZXR1cm5zIHRoZSBjbGFzc2VzIGRlY2xhcmVkIGluIHRoZSBib2R5IG9mIGFuIGFycm93IGZ1bmN0aW9uIGJ5IHRyYXZlcnNpbmcgdGhlIEFTVFxyXG4vLyBGdW5jdGlvbiB0byBnZXQgY2xhc3NlcyBkZWNsYXJlZCBpbnNpZGUgYXJyb3cgZnVuY3Rpb25zXHJcbmZ1bmN0aW9uIGdldEFycm93RnVuY3Rpb25DbGFzc2VzKGY6IEFycm93RnVuY3Rpb24pOiBDbGFzc0RlY2xhcmF0aW9uW10ge1xyXG4gICAgY29uc3QgY2xhc3NlczogQ2xhc3NEZWNsYXJhdGlvbltdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZENsYXNzZXMobm9kZTogYW55KSB7XHJcbiAgICAgICAgaWYgKG5vZGUuZ2V0S2luZCgpID09PSBTeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb24pIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKG5vZGUgYXMgQ2xhc3NEZWNsYXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGZpbmRDbGFzc2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kQ2xhc3NlcyhmKTtcclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG59XHJcblxyXG5cclxuLy8gR2V0IHRoZSBjbGFzc2VzIHVzaW5nIGdldENsYXNzZXMoKVxyXG5jb25zdCBjbGFzc2VzID0gc291cmNlRmlsZS5nZXRDbGFzc2VzKCk7XHJcblxyXG5jb25zdCBhcnJvd0Z1bmN0aW9ucyA9IHNvdXJjZUZpbGUuZ2V0RGVzY2VuZGFudHNPZktpbmQoU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uKTtcclxuXHJcbmNvbnNvbGUubG9nKFwiQXJyb3cgZnVuY3Rpb25zIGZvdW5kOlwiLCBhcnJvd0Z1bmN0aW9ucy5tYXAoZiA9PiBmLmdldFRleHQoKSkpO1xyXG5cclxuLy8gZmluZCB0aGUgY2xhc3NlcyBkZWNsYXJlZCBpbiBib2RpZXMgb2YgQXJyb3dGdW5jdGlvbnNcclxuLy8gY2FuJ3QgdXNlIGdldENsYXNzZXMoKSBiZWNhdXNlIGl0IG9ubHkgcmV0dXJucyBjbGFzc2VzIGRlY2xhcmVkIGluIHRoZSBzb3VyY2UgZmlsZVxyXG5jb25zdCBjbGFzc2VzSW5BcnJvd0Z1bmN0aW9ucyA9IGFycm93RnVuY3Rpb25zLm1hcChmID0+IGdldEFycm93RnVuY3Rpb25DbGFzc2VzKGYpKS5mbGF0KCk7XHJcblxyXG4vLyBMb2cgdGhlIHJlc3VsdHNcclxuY29uc29sZS5sb2coXCJDbGFzc2VzIGZvdW5kOlwiLCBjbGFzc2VzLm1hcChjbHMgPT4gY2xzLmdldE5hbWUoKSkpO1xyXG5jb25zb2xlLmxvZyhcIkNsYXNzZXMgZm91bmQgaW4gYXJyb3cgZnVuY3Rpb25zOlwiLCBjbGFzc2VzSW5BcnJvd0Z1bmN0aW9ucy5tYXAoY2xzID0+IGNscy5nZXROYW1lKCkpKTtcclxuIl19
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FamixJSONExporter = void 0;
|
|
4
|
-
const famix_base_element_1 = require("./famix_base_element");
|
|
5
|
-
/**
|
|
6
|
-
* This class is used to export Famix elements to JSON
|
|
7
|
-
*/
|
|
8
|
-
class FamixJSONExporter {
|
|
9
|
-
/**
|
|
10
|
-
* Constructor of the FamixJSONExporter class
|
|
11
|
-
* @param packageClass Name of a Famix class
|
|
12
|
-
* @param element A Famix element to export, this element is an instance of the class named "packageClass"
|
|
13
|
-
*/
|
|
14
|
-
constructor(packageClass, element) {
|
|
15
|
-
this.bufferArray = {}; // A buffer to store the properties of the Famix element
|
|
16
|
-
this.FamixPrefix = "FamixTypeScript"; // Prefix of the Famix element
|
|
17
|
-
this.element = element;
|
|
18
|
-
this.bufferArray["FM3"] = this.FamixPrefix + "." + packageClass;
|
|
19
|
-
this.bufferArray["id"] = this.element.id;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Adds a property to the Famix element
|
|
23
|
-
* @param name Name of the property
|
|
24
|
-
* @param prop A property
|
|
25
|
-
*/
|
|
26
|
-
addProperty(name, prop) {
|
|
27
|
-
if (prop instanceof Set) {
|
|
28
|
-
const valueArray = [];
|
|
29
|
-
for (const value of Array.from(prop.values())) {
|
|
30
|
-
if (value instanceof famix_base_element_1.FamixBaseElement) {
|
|
31
|
-
valueArray.push({ "ref": value.id });
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
valueArray.push(value);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
this.bufferArray[name] = valueArray;
|
|
38
|
-
}
|
|
39
|
-
else if (prop instanceof famix_base_element_1.FamixBaseElement) {
|
|
40
|
-
this.bufferArray[name] = { "ref": prop.id };
|
|
41
|
-
}
|
|
42
|
-
else if (prop !== undefined && !(prop instanceof Set)) {
|
|
43
|
-
this.bufferArray[name] = prop;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Gets a JSON representation of the Famix element
|
|
48
|
-
* @returns A JSON representation of the Famix element
|
|
49
|
-
*/
|
|
50
|
-
getJSON() {
|
|
51
|
-
return JSON.stringify(this.bufferArray);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.FamixJSONExporter = FamixJSONExporter;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaXhfSlNPTl9leHBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZmFtaXgvc3JjL2ZhbWl4X0pTT05fZXhwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQXdEO0FBRXhEOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFNMUI7Ozs7T0FJRztJQUNILFlBQVksWUFBb0IsRUFBRSxPQUF5QjtRQVJuRCxnQkFBVyxHQUFRLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtRQUMvRSxnQkFBVyxHQUFHLGlCQUFpQixDQUFDLENBQUMsOEJBQThCO1FBUW5FLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFFLElBQWE7UUFDMUMsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdEIsTUFBTSxVQUFVLEdBQW1CLEVBQUUsQ0FBQztZQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxLQUFLLFlBQVkscUNBQWdCLEVBQUUsQ0FBQztvQkFDcEMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsQ0FBQztxQkFDSSxDQUFDO29CQUNGLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDeEMsQ0FBQzthQUNJLElBQUksSUFBSSxZQUFZLHFDQUFnQixFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDaEQsQ0FBQzthQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0o7QUFsREQsOENBa0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFtaXhCYXNlRWxlbWVudCB9IGZyb20gXCIuL2ZhbWl4X2Jhc2VfZWxlbWVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBleHBvcnQgRmFtaXggZWxlbWVudHMgdG8gSlNPTlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZhbWl4SlNPTkV4cG9ydGVyIHtcclxuXHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEZhbWl4QmFzZUVsZW1lbnQ7IC8vIEEgRmFtaXggZWxlbWVudCB0byBleHBvcnRcclxuICAgIHByaXZhdGUgYnVmZmVyQXJyYXk6IGFueSA9IHt9OyAvLyBBIGJ1ZmZlciB0byBzdG9yZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgRmFtaXggZWxlbWVudFxyXG4gICAgcHJpdmF0ZSBGYW1peFByZWZpeCA9IFwiRmFtaXhUeXBlU2NyaXB0XCI7IC8vIFByZWZpeCBvZiB0aGUgRmFtaXggZWxlbWVudFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3Igb2YgdGhlIEZhbWl4SlNPTkV4cG9ydGVyIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0gcGFja2FnZUNsYXNzIE5hbWUgb2YgYSBGYW1peCBjbGFzc1xyXG4gICAgICogQHBhcmFtIGVsZW1lbnQgQSBGYW1peCBlbGVtZW50IHRvIGV4cG9ydCwgdGhpcyBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBuYW1lZCBcInBhY2thZ2VDbGFzc1wiXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHBhY2thZ2VDbGFzczogc3RyaW5nLCBlbGVtZW50OiBGYW1peEJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmJ1ZmZlckFycmF5W1wiRk0zXCJdID0gdGhpcy5GYW1peFByZWZpeCArIFwiLlwiICsgcGFja2FnZUNsYXNzO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyQXJyYXlbXCJpZFwiXSA9IHRoaXMuZWxlbWVudC5pZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBwcm9wZXJ0eSB0byB0aGUgRmFtaXggZWxlbWVudFxyXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHlcclxuICAgICAqIEBwYXJhbSBwcm9wIEEgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFByb3BlcnR5KG5hbWU6IHN0cmluZywgcHJvcDogdW5rbm93bik6IHZvaWQge1xyXG4gICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgU2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQXJyYXk6IEFycmF5PHVua25vd24+ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbShwcm9wLnZhbHVlcygpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmFtaXhCYXNlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQXJyYXkucHVzaCh7IFwicmVmXCI6IHZhbHVlLmlkIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVBcnJheS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckFycmF5W25hbWVdID0gdmFsdWVBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZhbWl4QmFzZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5idWZmZXJBcnJheVtuYW1lXSA9IHsgXCJyZWZcIjogcHJvcC5pZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wICE9PSB1bmRlZmluZWQgJiYgIShwcm9wIGluc3RhbmNlb2YgU2V0KSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckFycmF5W25hbWVdID0gcHJvcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgRmFtaXggZWxlbWVudFxyXG4gICAgICogQHJldHVybnMgQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBGYW1peCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRKU09OKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuYnVmZmVyQXJyYXkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FamixBaseElement = void 0;
|
|
4
|
-
const analyze_1 = require("../../../analyze");
|
|
5
|
-
// import { FamixRepository } from "./famix_repository";
|
|
6
|
-
class FamixBaseElement {
|
|
7
|
-
// constructor(repo: FamixRepository) {
|
|
8
|
-
// repo.addElement(this);
|
|
9
|
-
// }
|
|
10
|
-
constructor() {
|
|
11
|
-
}
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
|
-
addPropertiesToExporter(exporter) {
|
|
14
|
-
analyze_1.logger.debug("addPropertiesToExporter not implemented for " + this.constructor.name + `(${exporter})`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.FamixBaseElement = FamixBaseElement;
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaXhfYmFzZV9lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9mYW1peC9zcmMvZmFtaXhfYmFzZV9lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUEwQztBQUUxQyx3REFBd0Q7QUFFeEQsTUFBc0IsZ0JBQWdCO0lBSWxDLHVDQUF1QztJQUN2QywyQkFBMkI7SUFDM0IsSUFBSTtJQUVKO0lBQ0EsQ0FBQztJQUlELDZEQUE2RDtJQUN0RCx1QkFBdUIsQ0FBQyxRQUEyQjtRQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDM0csQ0FBQztDQUNKO0FBakJELDRDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9hbmFseXplXCI7XHJcbmltcG9ydCB7IEZhbWl4SlNPTkV4cG9ydGVyIH0gZnJvbSBcIi4vZmFtaXhfSlNPTl9leHBvcnRlclwiO1xyXG4vLyBpbXBvcnQgeyBGYW1peFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9mYW1peF9yZXBvc2l0b3J5XCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmFtaXhCYXNlRWxlbWVudCB7XHJcblxyXG4gICAgcHVibGljIGlkITogbnVtYmVyO1xyXG5cclxuICAgIC8vIGNvbnN0cnVjdG9yKHJlcG86IEZhbWl4UmVwb3NpdG9yeSkge1xyXG4gICAgLy8gICByZXBvLmFkZEVsZW1lbnQodGhpcyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IGdldEpTT04oKTogc3RyaW5nO1xyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhZGRQcm9wZXJ0aWVzVG9FeHBvcnRlcihleHBvcnRlcjogRmFtaXhKU09ORXhwb3J0ZXIpOiB2b2lkIHtcclxuICAgICAgICBsb2dnZXIuZGVidWcoXCJhZGRQcm9wZXJ0aWVzVG9FeHBvcnRlciBub3QgaW1wbGVtZW50ZWQgZm9yIFwiICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgYCgke2V4cG9ydGVyfSlgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FamixRepository = void 0;
|
|
4
|
-
const famix_1 = require("./model/famix");
|
|
5
|
-
/**
|
|
6
|
-
* This class is used to store all Famix elements
|
|
7
|
-
*/
|
|
8
|
-
class FamixRepository {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.elements = new Set(); // All Famix elements
|
|
11
|
-
this.famixClasses = new Set(); // All Famix classes
|
|
12
|
-
this.famixInterfaces = new Set(); // All Famix interfaces
|
|
13
|
-
this.famixModules = new Set(); // All Famix namespaces
|
|
14
|
-
this.famixMethods = new Set(); // All Famix methods
|
|
15
|
-
this.famixVariables = new Set(); // All Famix variables
|
|
16
|
-
this.famixFunctions = new Set(); // All Famix functions
|
|
17
|
-
this.famixFiles = new Set(); // All Famix files
|
|
18
|
-
this.idCounter = 1; // Id counter
|
|
19
|
-
this.absolutePath = "";
|
|
20
|
-
this.fmxElementObjectMap = new Map();
|
|
21
|
-
this.tsMorphObjectMap = new Map(); // TODO: add this map to have two-way mapping between Famix and TS Morph objects
|
|
22
|
-
this.addElement(new famix_1.SourceLanguage()); // add the source language entity (TypeScript)
|
|
23
|
-
}
|
|
24
|
-
setFmxElementObjectMap(fmxElementObjectMap) {
|
|
25
|
-
this.fmxElementObjectMap = fmxElementObjectMap;
|
|
26
|
-
}
|
|
27
|
-
getFmxElementObjectMap() {
|
|
28
|
-
return this.fmxElementObjectMap;
|
|
29
|
-
}
|
|
30
|
-
getAbsolutePath() {
|
|
31
|
-
return this.absolutePath;
|
|
32
|
-
}
|
|
33
|
-
setAbsolutePath(path) {
|
|
34
|
-
this.absolutePath = path;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Gets a Famix entity by id
|
|
38
|
-
* @param id An id of a Famix entity
|
|
39
|
-
* @returns The Famix entity corresponding to the id or undefined if it doesn't exist
|
|
40
|
-
*/
|
|
41
|
-
getFamixEntityById(id) {
|
|
42
|
-
const entity = Array.from(this.elements.values()).find(e => e.id === id);
|
|
43
|
-
return entity;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Gets a Famix entity by fully qualified name
|
|
47
|
-
* @param fullyQualifiedName A fully qualified name
|
|
48
|
-
* @returns The Famix entity corresponding to the fully qualified name or undefined if it doesn't exist
|
|
49
|
-
*/
|
|
50
|
-
getFamixEntityByFullyQualifiedName(fullyQualifiedName) {
|
|
51
|
-
const allEntities = Array.from(this.elements.values()).filter(e => e instanceof famix_1.NamedEntity);
|
|
52
|
-
const entity = allEntities.find(e => e.fullyQualifiedName === fullyQualifiedName);
|
|
53
|
-
return entity;
|
|
54
|
-
}
|
|
55
|
-
export(arg0) {
|
|
56
|
-
if (arg0.format === "json") {
|
|
57
|
-
return this.getJSON();
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
throw new Error("Unsupported format");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Only for tests
|
|
64
|
-
/**
|
|
65
|
-
* Gets all Famix entities
|
|
66
|
-
* @returns All Famix entities
|
|
67
|
-
*/
|
|
68
|
-
_getAllEntities() {
|
|
69
|
-
return new Set(Array.from(this.elements.values()));
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Gets all Famix entities of a given type
|
|
73
|
-
* @param theType A type of Famix entity
|
|
74
|
-
* @returns All Famix entities of the given type
|
|
75
|
-
*/
|
|
76
|
-
_getAllEntitiesWithType(theType) {
|
|
77
|
-
return new Set(Array.from(this.elements.values()).filter(e => e.constructor.name === theType));
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Gets a Famix class by name
|
|
81
|
-
* @param name A class name
|
|
82
|
-
* @returns The Famix class corresponding to the name or undefined if it doesn't exist
|
|
83
|
-
*/
|
|
84
|
-
_getFamixClass(fullyQualifiedName) {
|
|
85
|
-
return Array.from(this.famixClasses.values()).find(ns => ns.fullyQualifiedName === fullyQualifiedName);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Gets a Famix interface by name
|
|
89
|
-
* @param name An interface name
|
|
90
|
-
* @returns The Famix interface corresponding to the name or undefined if it doesn't exist
|
|
91
|
-
*/
|
|
92
|
-
_getFamixInterface(fullyQualifiedName) {
|
|
93
|
-
return Array.from(this.famixInterfaces.values()).find(ns => ns.fullyQualifiedName === fullyQualifiedName);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Gets a Famix method by name
|
|
97
|
-
* @param name A method name
|
|
98
|
-
* @returns The Famix method corresponding to the name or undefined if it doesn't exist
|
|
99
|
-
*/
|
|
100
|
-
_getFamixMethod(fullyQualifiedName) {
|
|
101
|
-
return Array.from(this.famixMethods.values()).find(ns => ns.fullyQualifiedName === fullyQualifiedName);
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Gets a Famix function by name
|
|
105
|
-
* @param name A function name
|
|
106
|
-
* @returns The Famix function corresponding to the name or undefined if it doesn't exist
|
|
107
|
-
*/
|
|
108
|
-
_getFamixFunction(fullyQualifiedName) {
|
|
109
|
-
return Array.from(this.famixFunctions.values()).find(ns => ns.fullyQualifiedName === fullyQualifiedName);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Gets a Famix variable by name
|
|
113
|
-
* @param name A variable name
|
|
114
|
-
* @returns The Famix variable corresponding to the name or undefined if it doesn't exist
|
|
115
|
-
*/
|
|
116
|
-
_getFamixVariable(fullyQualifiedName) {
|
|
117
|
-
return Array.from(this.famixVariables.values()).find(v => v.fullyQualifiedName === fullyQualifiedName);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Gets a Famix namespace by name
|
|
121
|
-
* @param name A namespace name
|
|
122
|
-
* @returns The Famix namespace corresponding to the name or undefined if it doesn't exist
|
|
123
|
-
*/
|
|
124
|
-
_getFamixModule(fullyQualifiedName) {
|
|
125
|
-
return Array.from(this.famixModules.values()).find(ns => ns.fullyQualifiedName === fullyQualifiedName);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Gets all Famix namespaces
|
|
129
|
-
* @returns All Famix namespaces
|
|
130
|
-
*/
|
|
131
|
-
_getFamixModules() {
|
|
132
|
-
return new Set(Array.from(this.famixModules.values()));
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Gets a Famix file by name
|
|
136
|
-
* @param name A file name
|
|
137
|
-
* @returns The Famix file corresponding to the name or undefined if it doesn't exist
|
|
138
|
-
*/
|
|
139
|
-
_getFamixFile(fullyQualifiedName) {
|
|
140
|
-
return Array.from(this.famixFiles.values()).find(ns => ns.name === fullyQualifiedName);
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Gets all Famix files
|
|
144
|
-
* @returns All Famix files
|
|
145
|
-
*/
|
|
146
|
-
_getFamixFiles() {
|
|
147
|
-
return new Set(Array.from(this.famixFiles.values()));
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Gets all method names as a set from a class
|
|
151
|
-
* @param className A class name
|
|
152
|
-
* @returns The set of class "className" method names
|
|
153
|
-
*/
|
|
154
|
-
_methodNamesAsSetFromClass(className) {
|
|
155
|
-
const theClass = this._getFamixClass(className);
|
|
156
|
-
return new Set(Array.from(theClass.methods).map(m => m.name));
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Gets all method parents as a set from a class
|
|
160
|
-
* @param className A class name
|
|
161
|
-
* @returns The set of class "className" method parents
|
|
162
|
-
*/
|
|
163
|
-
_methodParentsAsSetFromClass(className) {
|
|
164
|
-
const theClass = this._getFamixClass(className);
|
|
165
|
-
return new Set(Array.from(theClass.methods).map(m => m.parentEntity));
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Gets the map of Famix element ids and their Famix element from a JSON model
|
|
169
|
-
* @param model A JSON model
|
|
170
|
-
* @returns The map of Famix element ids and their Famix element from the JSON model
|
|
171
|
-
*/
|
|
172
|
-
_initMapFromModel(model) {
|
|
173
|
-
const parsedModel = JSON.parse(model);
|
|
174
|
-
const idToElementMap = new Map();
|
|
175
|
-
parsedModel.forEach(element => {
|
|
176
|
-
idToElementMap.set(element.id, element);
|
|
177
|
-
});
|
|
178
|
-
return idToElementMap;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Adds a Famix element to the repository
|
|
182
|
-
* @param element A Famix element
|
|
183
|
-
*/
|
|
184
|
-
addElement(element) {
|
|
185
|
-
if (element instanceof famix_1.Class) {
|
|
186
|
-
this.famixClasses.add(element);
|
|
187
|
-
}
|
|
188
|
-
else if (element instanceof famix_1.Interface) {
|
|
189
|
-
this.famixInterfaces.add(element);
|
|
190
|
-
}
|
|
191
|
-
else if (element instanceof famix_1.Module) {
|
|
192
|
-
this.famixModules.add(element);
|
|
193
|
-
}
|
|
194
|
-
else if (element instanceof famix_1.Variable) {
|
|
195
|
-
this.famixVariables.add(element);
|
|
196
|
-
}
|
|
197
|
-
else if (element instanceof famix_1.Method) {
|
|
198
|
-
this.famixMethods.add(element);
|
|
199
|
-
}
|
|
200
|
-
else if (element instanceof famix_1.Function || element instanceof famix_1.ArrowFunction) {
|
|
201
|
-
this.famixFunctions.add(element);
|
|
202
|
-
}
|
|
203
|
-
else if (element instanceof famix_1.ScriptEntity || element instanceof famix_1.Module) {
|
|
204
|
-
this.famixFiles.add(element);
|
|
205
|
-
}
|
|
206
|
-
this.elements.add(element);
|
|
207
|
-
element.id = this.idCounter;
|
|
208
|
-
this.idCounter++;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Gets a JSON representation of the repository
|
|
212
|
-
* @returns A JSON representation of the repository
|
|
213
|
-
*/
|
|
214
|
-
getJSON() {
|
|
215
|
-
let ret = "[";
|
|
216
|
-
for (const element of Array.from(this.elements.values())) {
|
|
217
|
-
ret = ret + element.getJSON() + ",";
|
|
218
|
-
}
|
|
219
|
-
ret = ret.substring(0, ret.length - 1);
|
|
220
|
-
return ret + "]";
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
exports.FamixRepository = FamixRepository;
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaXhfcmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZmFtaXgvc3JjL2ZhbWl4X3JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQTRLO0FBRzVLOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBY3hCO1FBYlEsYUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDLENBQUMscUJBQXFCO1FBQzdELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVMsQ0FBQyxDQUFDLG9CQUFvQjtRQUNyRCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFhLENBQUMsQ0FBQyx1QkFBdUI7UUFDL0QsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDLENBQUMsdUJBQXVCO1FBQ3pELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQyxDQUFDLG9CQUFvQjtRQUN0RCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFZLENBQUMsQ0FBQyxzQkFBc0I7UUFDNUQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQyxDQUFDLHNCQUFzQjtRQUN2RSxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUMsQ0FBQyxrQkFBa0I7UUFDakUsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDNUIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDakUscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUMsQ0FBQyxnRkFBZ0Y7UUFHbkosSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLHNCQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUUsOENBQThDO0lBQzFGLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxtQkFBeUQ7UUFDbkYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ25ELENBQUM7SUFFTSxzQkFBc0I7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LElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN2RCxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDeEMsQ0FBQztRQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0NBQ0o7QUEzT0QsMENBMk9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFtaXhCYXNlRWxlbWVudCB9IGZyb20gXCIuL2ZhbWl4X2Jhc2VfZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBDbGFzcywgSW50ZXJmYWNlLCBWYXJpYWJsZSwgTWV0aG9kLCBBcnJvd0Z1bmN0aW9uLCBGdW5jdGlvbiBhcyBGYW1peEZ1bmN0aW9uRW50aXR5LCBUeXBlLCBOYW1lZEVudGl0eSwgU2NyaXB0RW50aXR5LCBNb2R1bGUsIFNvdXJjZUxhbmd1YWdlIH0gZnJvbSBcIi4vbW9kZWwvZmFtaXhcIjtcclxuaW1wb3J0ICogYXMgRmFtaXggZnJvbSBcIi4vbW9kZWwvZmFtaXhcIjtcclxuaW1wb3J0IHsgVFNNb3JwaE9iamVjdFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vZmFtaXhfZnVuY3Rpb25zL0VudGl0eURpY3Rpb25hcnlcIjtcclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzdG9yZSBhbGwgRmFtaXggZWxlbWVudHNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGYW1peFJlcG9zaXRvcnkge1xyXG4gICAgcHJpdmF0ZSBlbGVtZW50cyA9IG5ldyBTZXQ8RmFtaXhCYXNlRWxlbWVudD4oKTsgLy8gQWxsIEZhbWl4IGVsZW1lbnRzXHJcbiAgICBwcml2YXRlIGZhbWl4Q2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7IC8vIEFsbCBGYW1peCBjbGFzc2VzXHJcbiAgICBwcml2YXRlIGZhbWl4SW50ZXJmYWNlcyA9IG5ldyBTZXQ8SW50ZXJmYWNlPigpOyAvLyBBbGwgRmFtaXggaW50ZXJmYWNlc1xyXG4gICAgcHJpdmF0ZSBmYW1peE1vZHVsZXMgPSBuZXcgU2V0PE1vZHVsZT4oKTsgLy8gQWxsIEZhbWl4IG5hbWVzcGFjZXNcclxuICAgIHByaXZhdGUgZmFtaXhNZXRob2RzID0gbmV3IFNldDxNZXRob2Q+KCk7IC8vIEFsbCBGYW1peCBtZXRob2RzXHJcbiAgICBwcml2YXRlIGZhbWl4VmFyaWFibGVzID0gbmV3IFNldDxWYXJpYWJsZT4oKTsgLy8gQWxsIEZhbWl4IHZhcmlhYmxlc1xyXG4gICAgcHJpdmF0ZSBmYW1peEZ1bmN0aW9ucyA9IG5ldyBTZXQ8RmFtaXhGdW5jdGlvbkVudGl0eT4oKTsgLy8gQWxsIEZhbWl4IGZ1bmN0aW9uc1xyXG4gICAgcHJpdmF0ZSBmYW1peEZpbGVzID0gbmV3IFNldDxTY3JpcHRFbnRpdHkgfCBNb2R1bGU+KCk7IC8vIEFsbCBGYW1peCBmaWxlc1xyXG4gICAgcHJpdmF0ZSBpZENvdW50ZXIgPSAxOyAvLyBJZCBjb3VudGVyXHJcbiAgICBwcml2YXRlIGFic29sdXRlUGF0aDogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgZm14RWxlbWVudE9iamVjdE1hcCA9IG5ldyBNYXA8RmFtaXguRW50aXR5LCBUU01vcnBoT2JqZWN0VHlwZT4oKTtcclxuICAgIHByaXZhdGUgdHNNb3JwaE9iamVjdE1hcCA9IG5ldyBNYXA8VFNNb3JwaE9iamVjdFR5cGUsIEZhbWl4LkVudGl0eT4oKTsgLy8gVE9ETzogYWRkIHRoaXMgbWFwIHRvIGhhdmUgdHdvLXdheSBtYXBwaW5nIGJldHdlZW4gRmFtaXggYW5kIFRTIE1vcnBoIG9iamVjdHNcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50KG5ldyBTb3VyY2VMYW5ndWFnZSgpKTsgIC8vIGFkZCB0aGUgc291cmNlIGxhbmd1YWdlIGVudGl0eSAoVHlwZVNjcmlwdClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Rm14RWxlbWVudE9iamVjdE1hcChmbXhFbGVtZW50T2JqZWN0TWFwOiBNYXA8RmFtaXguRW50aXR5LCBUU01vcnBoT2JqZWN0VHlwZT4pIHtcclxuICAgICAgICB0aGlzLmZteEVsZW1lbnRPYmplY3RNYXAgPSBmbXhFbGVtZW50T2JqZWN0TWFwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGbXhFbGVtZW50T2JqZWN0TWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZteEVsZW1lbnRPYmplY3RNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFic29sdXRlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QWJzb2x1dGVQYXRoKHBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWJzb2x1dGVQYXRoID0gcGF0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBGYW1peCBlbnRpdHkgYnkgaWRcclxuICAgICAqIEBwYXJhbSBpZCBBbiBpZCBvZiBhIEZhbWl4IGVudGl0eVxyXG4gICAgICogQHJldHVybnMgVGhlIEZhbWl4IGVudGl0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpZCBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RmFtaXhFbnRpdHlCeUlkKGlkOiBudW1iZXIpOiBGYW1peEJhc2VFbGVtZW50IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBlbnRpdHkgPSBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudmFsdWVzKCkpLmZpbmQoZSA9PiBlLmlkID09PSBpZCk7XHJcbiAgICAgICAgcmV0dXJuIGVudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBGYW1peCBlbnRpdHkgYnkgZnVsbHkgcXVhbGlmaWVkIG5hbWVcclxuICAgICAqIEBwYXJhbSBmdWxseVF1YWxpZmllZE5hbWUgQSBmdWxseSBxdWFsaWZpZWQgbmFtZVxyXG4gICAgICogQHJldHVybnMgVGhlIEZhbWl4IGVudGl0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RmFtaXhFbnRpdHlCeUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEZhbWl4QmFzZUVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGFsbEVudGl0aWVzID0gQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRzLnZhbHVlcygpKS5maWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmFtZWRFbnRpdHkpIGFzIEFycmF5PE5hbWVkRW50aXR5PjtcclxuICAgICAgICBjb25zdCBlbnRpdHkgPSBhbGxFbnRpdGllcy5maW5kKGUgPT4gZS5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZ1bGx5UXVhbGlmaWVkTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGVudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQoYXJnMDogeyBmb3JtYXQ6IHN0cmluZzsgfSkge1xyXG4gICAgICAgIGlmIChhcmcwLmZvcm1hdCA9PT0gXCJqc29uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SlNPTigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGZvcm1hdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIE9ubHkgZm9yIHRlc3RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBGYW1peCBlbnRpdGllc1xyXG4gICAgICogQHJldHVybnMgQWxsIEZhbWl4IGVudGl0aWVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfZ2V0QWxsRW50aXRpZXMoKTogU2V0PEZhbWl4QmFzZUVsZW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudmFsdWVzKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIEZhbWl4IGVudGl0aWVzIG9mIGEgZ2l2ZW4gdHlwZVxyXG4gICAgICogQHBhcmFtIHRoZVR5cGUgQSB0eXBlIG9mIEZhbWl4IGVudGl0eVxyXG4gICAgICogQHJldHVybnMgQWxsIEZhbWl4IGVudGl0aWVzIG9mIHRoZSBnaXZlbiB0eXBlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfZ2V0QWxsRW50aXRpZXNXaXRoVHlwZSh0aGVUeXBlOiBzdHJpbmcpOiBTZXQ8RmFtaXhCYXNlRWxlbWVudD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20odGhpcy5lbGVtZW50cy52YWx1ZXMoKSkuZmlsdGVyKGUgPT4gKGUgYXMgRmFtaXhCYXNlRWxlbWVudCkuY29uc3RydWN0b3IubmFtZSA9PT0gdGhlVHlwZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIEZhbWl4IGNsYXNzIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSBuYW1lIEEgY2xhc3MgbmFtZVxyXG4gICAgICogQHJldHVybnMgVGhlIEZhbWl4IGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hbWUgb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9nZXRGYW1peENsYXNzKGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogQ2xhc3MgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZmFtaXhDbGFzc2VzLnZhbHVlcygpKS5maW5kKG5zID0+IG5zLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBGYW1peCBpbnRlcmZhY2UgYnkgbmFtZVxyXG4gICAgICogQHBhcmFtIG5hbWUgQW4gaW50ZXJmYWNlIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRoZSBGYW1peCBpbnRlcmZhY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX2dldEZhbWl4SW50ZXJmYWNlKGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZhbWl4SW50ZXJmYWNlcy52YWx1ZXMoKSkuZmluZChucyA9PiBucy5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZ1bGx5UXVhbGlmaWVkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgRmFtaXggbWV0aG9kIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSBuYW1lIEEgbWV0aG9kIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRoZSBGYW1peCBtZXRob2QgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX2dldEZhbWl4TWV0aG9kKGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogTWV0aG9kIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZhbWl4TWV0aG9kcy52YWx1ZXMoKSkuZmluZChucyA9PiBucy5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZ1bGx5UXVhbGlmaWVkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgRmFtaXggZnVuY3Rpb24gYnkgbmFtZVxyXG4gICAgICogQHBhcmFtIG5hbWUgQSBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgRmFtaXggZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX2dldEZhbWl4RnVuY3Rpb24oZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBGYW1peEZ1bmN0aW9uRW50aXR5IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZhbWl4RnVuY3Rpb25zLnZhbHVlcygpKS5maW5kKG5zID0+IG5zLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgRmFtaXggdmFyaWFibGUgYnkgbmFtZVxyXG4gICAgICogQHBhcmFtIG5hbWUgQSB2YXJpYWJsZSBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgRmFtaXggdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZSBvciB1bmRlZmluZWQgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX2dldEZhbWl4VmFyaWFibGUoZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBWYXJpYWJsZSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mYW1peFZhcmlhYmxlcy52YWx1ZXMoKSkuZmluZCh2ID0+IHYuZnVsbHlRdWFsaWZpZWROYW1lID09PSBmdWxseVF1YWxpZmllZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIEZhbWl4IG5hbWVzcGFjZSBieSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBBIG5hbWVzcGFjZSBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgRmFtaXggbmFtZXNwYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hbWUgb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9nZXRGYW1peE1vZHVsZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IE1vZHVsZSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mYW1peE1vZHVsZXMudmFsdWVzKCkpLmZpbmQobnMgPT4gbnMuZnVsbHlRdWFsaWZpZWROYW1lID09PSBmdWxseVF1YWxpZmllZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgRmFtaXggbmFtZXNwYWNlc1xyXG4gICAgICogQHJldHVybnMgQWxsIEZhbWl4IG5hbWVzcGFjZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9nZXRGYW1peE1vZHVsZXMoKTogU2V0PE1vZHVsZT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20odGhpcy5mYW1peE1vZHVsZXMudmFsdWVzKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSBGYW1peCBmaWxlIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSBuYW1lIEEgZmlsZSBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgRmFtaXggZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfZ2V0RmFtaXhGaWxlKGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogU2NyaXB0RW50aXR5IHwgTW9kdWxlIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZhbWl4RmlsZXMudmFsdWVzKCkpLmZpbmQobnMgPT4gbnMubmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIEZhbWl4IGZpbGVzXHJcbiAgICAgKiBAcmV0dXJucyBBbGwgRmFtaXggZmlsZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9nZXRGYW1peEZpbGVzKCk6IFNldDxTY3JpcHRFbnRpdHkgfCBNb2R1bGU+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKHRoaXMuZmFtaXhGaWxlcy52YWx1ZXMoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgbWV0aG9kIG5hbWVzIGFzIGEgc2V0IGZyb20gYSBjbGFzc1xyXG4gICAgICogQHBhcmFtIGNsYXNzTmFtZSBBIGNsYXNzIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgY2xhc3MgXCJjbGFzc05hbWVcIiBtZXRob2QgbmFtZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9tZXRob2ROYW1lc0FzU2V0RnJvbUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IHRoZUNsYXNzID0gdGhpcy5fZ2V0RmFtaXhDbGFzcyhjbGFzc05hbWUpIGFzIENsYXNzO1xyXG4gICAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20odGhlQ2xhc3MubWV0aG9kcykubWFwKG0gPT4gbS5uYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBtZXRob2QgcGFyZW50cyBhcyBhIHNldCBmcm9tIGEgY2xhc3NcclxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgQSBjbGFzcyBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGNsYXNzIFwiY2xhc3NOYW1lXCIgbWV0aG9kIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgcHVibGljIF9tZXRob2RQYXJlbnRzQXNTZXRGcm9tQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBTZXQ8VHlwZT4ge1xyXG4gICAgICAgIGNvbnN0IHRoZUNsYXNzID0gdGhpcy5fZ2V0RmFtaXhDbGFzcyhjbGFzc05hbWUpIGFzIENsYXNzO1xyXG4gICAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20odGhlQ2xhc3MubWV0aG9kcykubWFwKG0gPT4gbS5wYXJlbnRFbnRpdHkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG1hcCBvZiBGYW1peCBlbGVtZW50IGlkcyBhbmQgdGhlaXIgRmFtaXggZWxlbWVudCBmcm9tIGEgSlNPTiBtb2RlbFxyXG4gICAgICogQHBhcmFtIG1vZGVsIEEgSlNPTiBtb2RlbFxyXG4gICAgICogQHJldHVybnMgVGhlIG1hcCBvZiBGYW1peCBlbGVtZW50IGlkcyBhbmQgdGhlaXIgRmFtaXggZWxlbWVudCBmcm9tIHRoZSBKU09OIG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfaW5pdE1hcEZyb21Nb2RlbChtb2RlbDogc3RyaW5nKTogTWFwPG51bWJlciwgdW5rbm93bj4ge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZE1vZGVsOiBBcnJheTxGYW1peEJhc2VFbGVtZW50PiA9IEpTT04ucGFyc2UobW9kZWwpO1xyXG4gICAgICAgIGNvbnN0IGlkVG9FbGVtZW50TWFwOiBNYXA8bnVtYmVyLCB1bmtub3duPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICBwYXJzZWRNb2RlbC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZFRvRWxlbWVudE1hcC5zZXQoZWxlbWVudC5pZCwgZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlkVG9FbGVtZW50TWFwO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBGYW1peCBlbGVtZW50IHRvIHRoZSByZXBvc2l0b3J5XHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBBIEZhbWl4IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogRmFtaXhCYXNlRWxlbWVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ2xhc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5mYW1peENsYXNzZXMuYWRkKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEludGVyZmFjZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZhbWl4SW50ZXJmYWNlcy5hZGQoZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTW9kdWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFtaXhNb2R1bGVzLmFkZChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZhbWl4VmFyaWFibGVzLmFkZChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXRob2QpIHtcclxuICAgICAgICAgICAgdGhpcy5mYW1peE1ldGhvZHMuYWRkKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZhbWl4RnVuY3Rpb25FbnRpdHkgfHwgZWxlbWVudCBpbnN0YW5jZW9mIEFycm93RnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5mYW1peEZ1bmN0aW9ucy5hZGQoZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2NyaXB0RW50aXR5IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBNb2R1bGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mYW1peEZpbGVzLmFkZChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5hZGQoZWxlbWVudCk7XHJcbiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuaWRDb3VudGVyO1xyXG4gICAgICAgIHRoaXMuaWRDb3VudGVyKys7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVwb3NpdG9yeVxyXG4gICAgICogQHJldHVybnMgQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXBvc2l0b3J5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRKU09OKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJldCA9IFwiW1wiO1xyXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMudmFsdWVzKCkpKSB7XHJcbiAgICAgICAgICAgIHJldCA9IHJldCArIGVsZW1lbnQuZ2V0SlNPTigpICsgXCIsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldCA9IHJldC5zdWJzdHJpbmcoMCwgcmV0Lmxlbmd0aCAtIDEpO1xyXG4gICAgICAgIHJldHVybiByZXQgKyBcIl1cIjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
const Famix = __importStar(require("./model/famix"));
|
|
26
|
-
const famix_base_element_1 = require("./famix_base_element");
|
|
27
|
-
const famix_JSON_exporter_1 = require("./famix_JSON_exporter");
|
|
28
|
-
const famix_repository_1 = require("./famix_repository");
|
|
29
|
-
const model = { Famix };
|
|
30
|
-
module.exports = { FamixBaseElement: famix_base_element_1.FamixBaseElement, FamixJSONExporter: famix_JSON_exporter_1.FamixJSONExporter, FamixRepository: famix_repository_1.FamixRepository, model };
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ZhbWl4L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBdUM7QUFDdkMsNkRBQXdEO0FBQ3hELCtEQUEwRDtBQUMxRCx5REFBcUQ7QUFFckQsTUFBTSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUV4QixpQkFBUyxFQUFFLGdCQUFnQixFQUFoQixxQ0FBZ0IsRUFBRSxpQkFBaUIsRUFBakIsdUNBQWlCLEVBQUUsZUFBZSxFQUFmLGtDQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBGYW1peCBmcm9tIFwiLi9tb2RlbC9mYW1peFwiO1xyXG5pbXBvcnQgeyBGYW1peEJhc2VFbGVtZW50IH0gZnJvbSBcIi4vZmFtaXhfYmFzZV9lbGVtZW50XCI7XHJcbmltcG9ydCB7IEZhbWl4SlNPTkV4cG9ydGVyIH0gZnJvbSBcIi4vZmFtaXhfSlNPTl9leHBvcnRlclwiO1xyXG5pbXBvcnQgeyBGYW1peFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9mYW1peF9yZXBvc2l0b3J5XCI7XHJcblxyXG5jb25zdCBtb2RlbCA9IHsgRmFtaXggfTtcclxuXHJcbmV4cG9ydCA9IHsgRmFtaXhCYXNlRWxlbWVudCwgRmFtaXhKU09ORXhwb3J0ZXIsIEZhbWl4UmVwb3NpdG9yeSwgbW9kZWwgfTtcclxuIl19
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Access = void 0;
|
|
4
|
-
const famix_JSON_exporter_1 = require("../../famix_JSON_exporter");
|
|
5
|
-
const entity_1 = require("./entity");
|
|
6
|
-
class Access extends entity_1.Entity {
|
|
7
|
-
getJSON() {
|
|
8
|
-
const json = new famix_JSON_exporter_1.FamixJSONExporter("Access", this);
|
|
9
|
-
this.addPropertiesToExporter(json);
|
|
10
|
-
return json.getJSON();
|
|
11
|
-
}
|
|
12
|
-
addPropertiesToExporter(exporter) {
|
|
13
|
-
super.addPropertiesToExporter(exporter);
|
|
14
|
-
exporter.addProperty("accessor", this.accessor);
|
|
15
|
-
exporter.addProperty("variable", this.variable);
|
|
16
|
-
exporter.addProperty("isWrite", this.isWrite);
|
|
17
|
-
}
|
|
18
|
-
get accessor() {
|
|
19
|
-
return this._accessor;
|
|
20
|
-
}
|
|
21
|
-
set accessor(accessor) {
|
|
22
|
-
this._accessor = accessor;
|
|
23
|
-
accessor.addAccess(this);
|
|
24
|
-
}
|
|
25
|
-
get variable() {
|
|
26
|
-
return this._variable;
|
|
27
|
-
}
|
|
28
|
-
set variable(variable) {
|
|
29
|
-
this._variable = variable;
|
|
30
|
-
variable.addIncomingAccess(this);
|
|
31
|
-
}
|
|
32
|
-
get isWrite() {
|
|
33
|
-
return this._isWrite;
|
|
34
|
-
}
|
|
35
|
-
set isWrite(isWrite) {
|
|
36
|
-
this._isWrite = isWrite;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.Access = Access;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9mYW1peC9zcmMvbW9kZWwvZmFtaXgvYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1FQUE4RDtBQUc5RCxxQ0FBa0M7QUFFbEMsTUFBYSxNQUFPLFNBQVEsZUFBTTtJQU12QixPQUFPO1FBQ1YsTUFBTSxJQUFJLEdBQXNCLElBQUksdUNBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsUUFBMkI7UUFDdEQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFFBQXlCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBMEI7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQWdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7Q0FDSjtBQTVDRCx3QkE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYW1peEpTT05FeHBvcnRlciB9IGZyb20gXCIuLi8uLi9mYW1peF9KU09OX2V4cG9ydGVyXCI7XHJcbmltcG9ydCB7IFN0cnVjdHVyYWxFbnRpdHkgfSBmcm9tIFwiLi9zdHJ1Y3R1cmFsX2VudGl0eVwiO1xyXG5pbXBvcnQgeyBDb250YWluZXJFbnRpdHkgfSBmcm9tIFwiLi9jb250YWluZXJfZW50aXR5XCI7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuL2VudGl0eVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2VzcyBleHRlbmRzIEVudGl0eSB7XHJcblxyXG4gICAgcHJpdmF0ZSBfYWNjZXNzb3IhOiBDb250YWluZXJFbnRpdHk7XHJcbiAgICBwcml2YXRlIF92YXJpYWJsZSE6IFN0cnVjdHVyYWxFbnRpdHk7XHJcbiAgICBwcml2YXRlIF9pc1dyaXRlITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZ2V0SlNPTigpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGpzb246IEZhbWl4SlNPTkV4cG9ydGVyID0gbmV3IEZhbWl4SlNPTkV4cG9ydGVyKFwiQWNjZXNzXCIsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYWRkUHJvcGVydGllc1RvRXhwb3J0ZXIoanNvbik7XHJcbiAgICAgICAgcmV0dXJuIGpzb24uZ2V0SlNPTigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQcm9wZXJ0aWVzVG9FeHBvcnRlcihleHBvcnRlcjogRmFtaXhKU09ORXhwb3J0ZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5hZGRQcm9wZXJ0aWVzVG9FeHBvcnRlcihleHBvcnRlcik7XHJcbiAgICAgICAgZXhwb3J0ZXIuYWRkUHJvcGVydHkoXCJhY2Nlc3NvclwiLCB0aGlzLmFjY2Vzc29yKTtcclxuICAgICAgICBleHBvcnRlci5hZGRQcm9wZXJ0eShcInZhcmlhYmxlXCIsIHRoaXMudmFyaWFibGUpO1xyXG4gICAgICAgIGV4cG9ydGVyLmFkZFByb3BlcnR5KFwiaXNXcml0ZVwiLCB0aGlzLmlzV3JpdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhY2Nlc3NvcigpOiBDb250YWluZXJFbnRpdHkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY2Nlc3NvcjtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgYWNjZXNzb3IoYWNjZXNzb3I6IENvbnRhaW5lckVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc29yID0gYWNjZXNzb3I7XHJcbiAgICAgICAgYWNjZXNzb3IuYWRkQWNjZXNzKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YXJpYWJsZSgpOiBTdHJ1Y3R1cmFsRW50aXR5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHZhcmlhYmxlKHZhcmlhYmxlOiBTdHJ1Y3R1cmFsRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5fdmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICB2YXJpYWJsZS5hZGRJbmNvbWluZ0FjY2Vzcyh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNXcml0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNXcml0ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgaXNXcml0ZShpc1dyaXRlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5faXNXcml0ZSA9IGlzV3JpdGU7XHJcbiAgICB9XHJcbn1cclxuIl19
|