ts2famix 1.4.1 → 2.0.1
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/LICENSE +1 -0
- package/README.md +30 -61
- package/dist/analyze.js +4 -2
- package/dist/analyze_functions/process_functions.js +285 -131
- package/dist/famix_functions/EntityDictionary.js +864 -231
- package/dist/famix_functions/helpers_creation.js +61 -10
- package/dist/fqn.js +160 -111
- package/dist/lib/famix/famix_JSON_exporter.js +55 -0
- package/dist/lib/famix/famix_base_element.js +18 -0
- package/dist/lib/famix/famix_repository.js +224 -0
- package/dist/lib/famix/{src/index.js → index.js} +1 -0
- package/dist/lib/famix/model/famix/access.js +40 -0
- package/dist/lib/famix/model/famix/accessor.js +17 -0
- package/dist/lib/famix/model/famix/alias.js +33 -0
- package/dist/lib/famix/model/famix/arrow_function.js +17 -0
- package/dist/lib/famix/model/famix/behavioral_entity.js +79 -0
- package/dist/lib/famix/model/famix/class.js +71 -0
- package/dist/lib/famix/model/famix/comment.js +39 -0
- package/dist/lib/famix/model/famix/concretisation.js +31 -0
- package/dist/lib/famix/model/famix/container_entity.js +126 -0
- package/dist/lib/famix/model/famix/decorator.js +32 -0
- package/dist/lib/famix/model/famix/entity.js +17 -0
- package/dist/lib/famix/model/famix/enum.js +31 -0
- package/dist/lib/famix/model/famix/enum_value.js +25 -0
- package/dist/lib/famix/model/famix/function.js +17 -0
- package/dist/lib/famix/model/famix/import_clause.js +41 -0
- package/dist/lib/famix/model/famix/index.js +86 -0
- package/dist/lib/famix/model/famix/indexed_file_anchor.js +38 -0
- package/dist/lib/famix/model/famix/inheritance.js +33 -0
- package/dist/lib/famix/model/famix/interface.js +64 -0
- package/dist/lib/famix/model/famix/invocation.js +54 -0
- package/dist/lib/famix/model/famix/method.js +67 -0
- package/dist/lib/famix/model/famix/module.js +60 -0
- package/dist/lib/famix/model/famix/named_entity.js +78 -0
- package/dist/lib/famix/model/famix/parameter.js +25 -0
- package/dist/lib/famix/model/famix/parameter_concretisation.js +44 -0
- package/dist/lib/famix/model/famix/parameter_type.js +45 -0
- package/dist/lib/famix/model/famix/parametric_arrow_function.js +31 -0
- package/dist/lib/famix/model/famix/parametric_class.js +44 -0
- package/dist/lib/famix/model/famix/parametric_function.js +31 -0
- package/dist/lib/famix/model/famix/parametric_interface.js +44 -0
- package/dist/lib/famix/model/famix/parametric_method.js +31 -0
- package/dist/lib/famix/model/famix/primitive_type.js +17 -0
- package/dist/lib/famix/model/famix/property.js +73 -0
- package/dist/lib/famix/model/famix/reference.js +33 -0
- package/dist/lib/famix/model/famix/scoping_entity.js +36 -0
- package/dist/lib/famix/model/famix/script_entity.js +29 -0
- package/dist/lib/famix/model/famix/source_anchor.js +27 -0
- package/dist/lib/famix/model/famix/source_language.js +35 -0
- package/dist/lib/famix/model/famix/sourced_entity.js +60 -0
- package/dist/lib/famix/model/famix/structural_entity.js +39 -0
- package/dist/lib/famix/model/famix/type.js +73 -0
- package/dist/lib/famix/model/famix/variable.js +24 -0
- package/dist/lib/ts-complex/cyclomatic-service.js +3 -3
- package/dist/refactorer/refactor-getter-setter.js +142 -0
- package/dist/ts2famix-cli-wrapper.js +42 -0
- package/dist/ts2famix-cli.js +8 -1
- package/dist/ts2famix-tsconfig.js +1 -0
- package/doc-uml/famix-typescript-model.puml +608 -0
- package/doc-uml/famix-typescript-model.svg +1 -0
- package/jest.config.json +2 -1
- package/package.json +13 -12
- package/src/analyze.ts +24 -23
- package/src/analyze_functions/process_functions.ts +310 -129
- package/src/famix_functions/EntityDictionary.ts +949 -271
- package/src/famix_functions/helpers_creation.ts +64 -6
- package/src/fqn.ts +169 -96
- package/{dist/lib/famix/src/famix_JSON_exporter.js → src/lib/famix/famix_JSON_exporter.ts} +16 -14
- package/src/lib/famix/famix_base_element.ts +22 -0
- package/{dist/lib/famix/src/famix_repository.js → src/lib/famix/famix_repository.ts} +96 -75
- package/src/lib/famix/model/famix/access.ts +50 -0
- package/src/lib/famix/model/famix/alias.ts +39 -0
- package/src/lib/famix/{src/model/famix/implicit_variable.ts → model/famix/arrow_function.ts} +3 -3
- package/src/lib/famix/model/famix/behavioral_entity.ts +97 -0
- package/src/lib/famix/model/famix/class.ts +85 -0
- package/src/lib/famix/model/famix/comment.ts +47 -0
- package/src/lib/famix/model/famix/concretisation.ts +40 -0
- package/src/lib/famix/model/famix/container_entity.ts +160 -0
- package/src/lib/famix/model/famix/decorator.ts +37 -0
- package/src/lib/famix/model/famix/enum.ts +30 -0
- package/src/lib/famix/model/famix/enum_value.ts +28 -0
- package/src/lib/famix/model/famix/import_clause.ts +51 -0
- package/src/lib/famix/{src/model → model}/famix/index.ts +8 -7
- package/src/lib/famix/model/famix/indexed_file_anchor.ts +46 -0
- package/src/lib/famix/model/famix/inheritance.ts +40 -0
- package/src/lib/famix/model/famix/interface.ts +75 -0
- package/src/lib/famix/model/famix/invocation.ts +65 -0
- package/src/lib/famix/model/famix/method.ts +89 -0
- package/src/lib/famix/model/famix/module.ts +71 -0
- package/src/lib/famix/model/famix/named_entity.ts +95 -0
- package/src/lib/famix/{src/model → model}/famix/parameter.ts +11 -12
- package/src/lib/famix/model/famix/parameter_concretisation.ts +51 -0
- package/src/lib/famix/model/famix/parameter_type.ts +58 -0
- package/src/lib/famix/model/famix/parametric_arrow_function.ts +32 -0
- package/src/lib/famix/model/famix/parametric_class.ts +49 -0
- package/src/lib/famix/model/famix/parametric_function.ts +32 -0
- package/src/lib/famix/model/famix/parametric_interface.ts +49 -0
- package/src/lib/famix/model/famix/parametric_method.ts +32 -0
- package/src/lib/famix/model/famix/primitive_type.ts +15 -0
- package/src/lib/famix/model/famix/property.ts +94 -0
- package/src/lib/famix/model/famix/reference.ts +40 -0
- package/src/lib/famix/model/famix/scoping_entity.ts +35 -0
- package/src/lib/famix/model/famix/script_entity.ts +34 -0
- package/src/lib/famix/model/famix/source_anchor.ts +30 -0
- package/src/lib/famix/model/famix/source_language.ts +35 -0
- package/src/lib/famix/model/famix/sourced_entity.ts +70 -0
- package/src/lib/famix/model/famix/structural_entity.ts +43 -0
- package/src/lib/famix/model/famix/type.ts +87 -0
- package/src/lib/famix/model/famix/variable.ts +27 -0
- package/src/lib/famix/package.json +1 -1
- package/src/lib/ts-complex/cyclomatic-service.ts +10 -10
- package/src/refactorer/refactor-getter-setter.ts +140 -0
- package/src/ts2famix-cli-wrapper.ts +21 -0
- package/src/ts2famix-cli.ts +8 -2
- package/tsconfig.check-tests.json +14 -0
- package/tsconfig.json +71 -69
- package/dist/famix2puml.js +0 -125
- package/dist/lib/famix/src/famix_base_element.js +0 -17
- package/dist/lib/famix/src/model/famix/access.js +0 -39
- package/dist/lib/famix/src/model/famix/accessor.js +0 -16
- package/dist/lib/famix/src/model/famix/alias.js +0 -32
- package/dist/lib/famix/src/model/famix/association.js +0 -36
- package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -81
- package/dist/lib/famix/src/model/famix/class.js +0 -70
- package/dist/lib/famix/src/model/famix/comment.js +0 -38
- package/dist/lib/famix/src/model/famix/container_entity.js +0 -125
- package/dist/lib/famix/src/model/famix/decorator.js +0 -31
- package/dist/lib/famix/src/model/famix/entity.js +0 -16
- package/dist/lib/famix/src/model/famix/enum.js +0 -30
- package/dist/lib/famix/src/model/famix/enum_value.js +0 -24
- package/dist/lib/famix/src/model/famix/function.js +0 -16
- package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -16
- package/dist/lib/famix/src/model/famix/import_clause.js +0 -39
- package/dist/lib/famix/src/model/famix/index.js +0 -83
- package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -51
- package/dist/lib/famix/src/model/famix/inheritance.js +0 -32
- package/dist/lib/famix/src/model/famix/interface.js +0 -63
- package/dist/lib/famix/src/model/famix/invocation.js +0 -53
- package/dist/lib/famix/src/model/famix/method.js +0 -66
- package/dist/lib/famix/src/model/famix/module.js +0 -31
- package/dist/lib/famix/src/model/famix/named_entity.js +0 -77
- package/dist/lib/famix/src/model/famix/namespace.js +0 -24
- package/dist/lib/famix/src/model/famix/parameter.js +0 -24
- package/dist/lib/famix/src/model/famix/parameter_type.js +0 -24
- package/dist/lib/famix/src/model/famix/parameterizable_class.js +0 -30
- package/dist/lib/famix/src/model/famix/parameterizable_interface.js +0 -30
- package/dist/lib/famix/src/model/famix/parameterized_type.js +0 -36
- package/dist/lib/famix/src/model/famix/primitive_type.js +0 -16
- package/dist/lib/famix/src/model/famix/property.js +0 -44
- package/dist/lib/famix/src/model/famix/reference.js +0 -32
- package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -35
- package/dist/lib/famix/src/model/famix/script_entity.js +0 -30
- package/dist/lib/famix/src/model/famix/source_anchor.js +0 -26
- package/dist/lib/famix/src/model/famix/source_language.js +0 -35
- package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -59
- package/dist/lib/famix/src/model/famix/structural_entity.js +0 -38
- package/dist/lib/famix/src/model/famix/text_anchor.js +0 -37
- package/dist/lib/famix/src/model/famix/type.js +0 -71
- package/dist/lib/famix/src/model/famix/variable.js +0 -23
- package/doc-uml/metamodel-full.svg +0 -1
- package/doc-uml/metamodel.svg +0 -1
- package/jest.config-old.ts +0 -199
- package/plantuml.jar +0 -0
- package/src/famix2puml.ts +0 -119
- package/src/lib/famix/package-lock.json +0 -301
- package/src/lib/famix/readme.md +0 -5
- package/src/lib/famix/src/famix_JSON_exporter.ts +0 -56
- package/src/lib/famix/src/famix_base_element.ts +0 -22
- package/src/lib/famix/src/famix_repository.ts +0 -243
- package/src/lib/famix/src/model/famix/access.ts +0 -53
- package/src/lib/famix/src/model/famix/alias.ts +0 -41
- package/src/lib/famix/src/model/famix/association.ts +0 -44
- package/src/lib/famix/src/model/famix/behavioral_entity.ts +0 -107
- package/src/lib/famix/src/model/famix/class.ts +0 -86
- package/src/lib/famix/src/model/famix/comment.ts +0 -50
- package/src/lib/famix/src/model/famix/container_entity.ts +0 -165
- package/src/lib/famix/src/model/famix/decorator.ts +0 -39
- package/src/lib/famix/src/model/famix/enum.ts +0 -31
- package/src/lib/famix/src/model/famix/enum_value.ts +0 -29
- package/src/lib/famix/src/model/famix/import_clause.ts +0 -53
- package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +0 -71
- package/src/lib/famix/src/model/famix/inheritance.ts +0 -42
- package/src/lib/famix/src/model/famix/interface.ts +0 -75
- package/src/lib/famix/src/model/famix/invocation.ts +0 -68
- package/src/lib/famix/src/model/famix/method.ts +0 -96
- package/src/lib/famix/src/model/famix/module.ts +0 -31
- package/src/lib/famix/src/model/famix/named_entity.ts +0 -98
- package/src/lib/famix/src/model/famix/namespace.ts +0 -28
- package/src/lib/famix/src/model/famix/parameter_type.ts +0 -33
- package/src/lib/famix/src/model/famix/parameterizable_class.ts +0 -31
- package/src/lib/famix/src/model/famix/parameterizable_interface.ts +0 -31
- package/src/lib/famix/src/model/famix/parameterized_type.ts +0 -40
- package/src/lib/famix/src/model/famix/primitive_type.ts +0 -15
- package/src/lib/famix/src/model/famix/property.ts +0 -54
- package/src/lib/famix/src/model/famix/reference.ts +0 -42
- package/src/lib/famix/src/model/famix/scoping_entity.ts +0 -35
- package/src/lib/famix/src/model/famix/script_entity.ts +0 -38
- package/src/lib/famix/src/model/famix/source_anchor.ts +0 -31
- package/src/lib/famix/src/model/famix/source_language.ts +0 -37
- package/src/lib/famix/src/model/famix/sourced_entity.ts +0 -73
- package/src/lib/famix/src/model/famix/structural_entity.ts +0 -44
- package/src/lib/famix/src/model/famix/text_anchor.ts +0 -49
- package/src/lib/famix/src/model/famix/type.ts +0 -88
- package/src/lib/famix/src/model/famix/variable.ts +0 -28
- package/src/lib/famix/tsconfig.json +0 -27
- package/src/lib/famix/tslint.json +0 -15
- /package/src/lib/famix/{src/index.ts → index.ts} +0 -0
- /package/src/lib/famix/{src/model → model}/famix/accessor.ts +0 -0
- /package/src/lib/famix/{src/model → model}/famix/entity.ts +0 -0
- /package/src/lib/famix/{src/model → model}/famix/function.ts +0 -0
|
@@ -53,12 +53,11 @@ const calculateFromSource = (ctx) => {
|
|
|
53
53
|
let complexity = 0;
|
|
54
54
|
const output = {};
|
|
55
55
|
(0, typescript_1.forEachChild)(ctx, function cb(node) {
|
|
56
|
-
var _a;
|
|
57
56
|
if ((0, tsutils_1.isFunctionWithBody)(node)) {
|
|
58
57
|
const old = complexity;
|
|
59
58
|
complexity = 1;
|
|
60
59
|
(0, typescript_1.forEachChild)(node, cb);
|
|
61
|
-
const name =
|
|
60
|
+
const name = getNodeName(node)?.toString();
|
|
62
61
|
output[name] = complexity;
|
|
63
62
|
complexity = old;
|
|
64
63
|
}
|
|
@@ -76,7 +75,8 @@ const calculate = (filePath) => {
|
|
|
76
75
|
throw new Error(`File "${filePath}" does not exists`);
|
|
77
76
|
}
|
|
78
77
|
const sourceText = (0, fs_1.readFileSync)(filePath).toString();
|
|
79
|
-
const source = (0, typescript_1.createSourceFile)(filePath, sourceText, typescript_1.ScriptTarget.ES2015);
|
|
78
|
+
const source = (0, typescript_1.createSourceFile)(filePath.toString(), sourceText, typescript_1.ScriptTarget.ES2015);
|
|
80
79
|
return calculateFromSource(source);
|
|
81
80
|
};
|
|
82
81
|
exports.calculate = calculate;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbG9tYXRpYy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cy1jb21wbGV4L2N5Y2xvbWF0aWMtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztFQVlFOzs7QUFFRiwyQ0FBaUs7QUFDaksscUNBQTZDO0FBQzdDLDJCQUF3RDtBQUV4RCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQTZCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFBLHlCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoRyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtJQUN6QywyQkFBMkI7SUFDM0IsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsS0FBSyx1QkFBVSxDQUFDLFVBQVU7WUFDeEIsT0FBUSxJQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEtBQUssdUJBQVUsQ0FBQyxXQUFXLENBQUM7UUFDNUIsS0FBSyx1QkFBVSxDQUFDLHFCQUFxQixDQUFDO1FBQ3RDLEtBQUssdUJBQVUsQ0FBQyxXQUFXLENBQUM7UUFDNUIsS0FBSyx1QkFBVSxDQUFDLFlBQVksQ0FBQztRQUM3QixLQUFLLHVCQUFVLENBQUMsY0FBYyxDQUFDO1FBQy9CLEtBQUssdUJBQVUsQ0FBQyxjQUFjLENBQUM7UUFDL0IsS0FBSyx1QkFBVSxDQUFDLFdBQVcsQ0FBQztRQUM1QixLQUFLLHVCQUFVLENBQUMsY0FBYztZQUM1QixPQUFPLElBQUksQ0FBQztRQUVkLEtBQUssdUJBQVUsQ0FBQyxnQkFBZ0I7WUFDOUIsUUFBUyxJQUF5QixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsS0FBSyx1QkFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDNUIsS0FBSyx1QkFBVSxDQUFDLHVCQUF1QjtvQkFDckMsT0FBTyxJQUFJLENBQUM7Z0JBQ2Q7b0JBQ0UsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztRQUVIO1lBQ0UsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELDBCQUEwQjtBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBUyxFQUFFLEVBQUU7SUFDeEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sTUFBTSxHQUE4QixFQUFFLENBQUM7SUFDN0MsSUFBQSx5QkFBWSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJO1FBQ2hDLElBQUksSUFBQSw0QkFBa0IsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQztZQUN2QixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBQSx5QkFBWSxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUMxQixVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QixVQUFVLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxJQUFBLHlCQUFZLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVLLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFFO0lBQzlDLElBQUksQ0FBQyxJQUFBLGVBQVUsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxRQUFRLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUEsaUJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFnQixFQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUseUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQVBXLFFBQUEsU0FBUyxhQU9wQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Qb3J0aW9ucyBvZiB0aGlzIGZpbGU6XG5cbk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAxOCBBbmFuZCBVbmRhdmlhXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbmltcG9ydCB7IGZvckVhY2hDaGlsZCwgaXNJZGVudGlmaWVyLCBTeW50YXhLaW5kLCBjcmVhdGVTb3VyY2VGaWxlLCBTY3JpcHRUYXJnZXQsIE5vZGUsIENhc2VDbGF1c2UsIEJpbmFyeUV4cHJlc3Npb24sIEZ1bmN0aW9uTGlrZURlY2xhcmF0aW9uIH0gZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uV2l0aEJvZHkgfSBmcm9tICd0c3V0aWxzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIFBhdGhMaWtlLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5cbmNvbnN0IGdldE5vZGVOYW1lID0gKG5vZGU6IEZ1bmN0aW9uTGlrZURlY2xhcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgcG9zLCBlbmQgfSA9IG5vZGU7XG4gIGNvbnN0IGtleSA9IG5hbWUgIT09IHVuZGVmaW5lZCAmJiBpc0lkZW50aWZpZXIobmFtZSkgPyBuYW1lLnRleHQgOiBKU09OLnN0cmluZ2lmeSh7IHBvcywgZW5kIH0pO1xuICByZXR1cm4ga2V5O1xufTtcblxuY29uc3QgaW5jcmVhc2VzQ29tcGxleGl0eSA9IChub2RlOiBOb2RlKSA9PiB7XG4gIC8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgU3ludGF4S2luZC5DYXNlQ2xhdXNlOlxuICAgICAgcmV0dXJuIChub2RlIGFzIENhc2VDbGF1c2UpLnN0YXRlbWVudHMubGVuZ3RoID4gMDtcbiAgICBjYXNlIFN5bnRheEtpbmQuQ2F0Y2hDbGF1c2U6XG4gICAgY2FzZSBTeW50YXhLaW5kLkNvbmRpdGlvbmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIFN5bnRheEtpbmQuRG9TdGF0ZW1lbnQ6XG4gICAgY2FzZSBTeW50YXhLaW5kLkZvclN0YXRlbWVudDpcbiAgICBjYXNlIFN5bnRheEtpbmQuRm9ySW5TdGF0ZW1lbnQ6XG4gICAgY2FzZSBTeW50YXhLaW5kLkZvck9mU3RhdGVtZW50OlxuICAgIGNhc2UgU3ludGF4S2luZC5JZlN0YXRlbWVudDpcbiAgICBjYXNlIFN5bnRheEtpbmQuV2hpbGVTdGF0ZW1lbnQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgU3ludGF4S2luZC5CaW5hcnlFeHByZXNzaW9uOlxuICAgICAgc3dpdGNoICgobm9kZSBhcyBCaW5hcnlFeHByZXNzaW9uKS5vcGVyYXRvclRva2VuLmtpbmQpIHtcbiAgICAgICAgY2FzZSBTeW50YXhLaW5kLkJhckJhclRva2VuOlxuICAgICAgICBjYXNlIFN5bnRheEtpbmQuQW1wZXJzYW5kQW1wZXJzYW5kVG9rZW46XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGluZGVudCAqL1xufTtcblxuY29uc3QgY2FsY3VsYXRlRnJvbVNvdXJjZSA9IChjdHg6IE5vZGUpID0+IHtcbiAgbGV0IGNvbXBsZXhpdHkgPSAwO1xuICBjb25zdCBvdXRwdXQ6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgZm9yRWFjaENoaWxkKGN0eCwgZnVuY3Rpb24gY2Iobm9kZSkge1xuICAgIGlmIChpc0Z1bmN0aW9uV2l0aEJvZHkobm9kZSkpIHtcbiAgICAgIGNvbnN0IG9sZCA9IGNvbXBsZXhpdHk7XG4gICAgICBjb21wbGV4aXR5ID0gMTtcbiAgICAgIGZvckVhY2hDaGlsZChub2RlLCBjYik7XG4gICAgICBjb25zdCBuYW1lID0gZ2V0Tm9kZU5hbWUobm9kZSk/LnRvU3RyaW5nKCk7XG4gICAgICBvdXRwdXRbbmFtZV0gPSBjb21wbGV4aXR5O1xuICAgICAgY29tcGxleGl0eSA9IG9sZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluY3JlYXNlc0NvbXBsZXhpdHkobm9kZSkpIHtcbiAgICAgICAgY29tcGxleGl0eSArPSAxO1xuICAgICAgfVxuICAgICAgZm9yRWFjaENoaWxkKG5vZGUsIGNiKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZSA9IChmaWxlUGF0aDogUGF0aExpa2UpID0+IHtcbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBcIiR7ZmlsZVBhdGh9XCIgZG9lcyBub3QgZXhpc3RzYCk7XG4gIH1cbiAgY29uc3Qgc291cmNlVGV4dCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCkudG9TdHJpbmcoKTtcbiAgY29uc3Qgc291cmNlID0gY3JlYXRlU291cmNlRmlsZShmaWxlUGF0aC50b1N0cmluZygpLCBzb3VyY2VUZXh0LCBTY3JpcHRUYXJnZXQuRVMyMDE1KTtcbiAgcmV0dXJuIGNhbGN1bGF0ZUZyb21Tb3VyY2Uoc291cmNlKTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const ts_morph_1 = require("ts-morph");
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const project = new ts_morph_1.Project();
|
|
29
|
+
project.addSourceFilesAtPaths("src/lib/famix/model/famix/famix_base_element.ts");
|
|
30
|
+
project.getSourceFiles().forEach(sourceFile => { console.log(sourceFile.getFilePath()); });
|
|
31
|
+
project.getSourceFiles().forEach(sourceFile => {
|
|
32
|
+
const typeMap = createTypeMap(sourceFile);
|
|
33
|
+
const classes = sourceFile.getClasses();
|
|
34
|
+
classes.forEach(cls => {
|
|
35
|
+
const properties = cls.getProperties();
|
|
36
|
+
cls.getMethods().forEach(method => {
|
|
37
|
+
const methodName = method.getName();
|
|
38
|
+
let propName;
|
|
39
|
+
if (isEligibleGetter(methodName)) {
|
|
40
|
+
propName = methodName.charAt(3).toLowerCase() + methodName.slice(4);
|
|
41
|
+
renamePropertyIfExists(cls, propName, properties);
|
|
42
|
+
refactorToGetter(cls, method, propName, typeMap);
|
|
43
|
+
replaceMethodCalls(cls, `get${capitalize(propName)}`, propName);
|
|
44
|
+
}
|
|
45
|
+
else if (isEligibleSetter(methodName)) {
|
|
46
|
+
propName = methodName.charAt(3).toLowerCase() + methodName.slice(4);
|
|
47
|
+
renamePropertyIfExists(cls, propName, properties);
|
|
48
|
+
refactorToSetter(cls, method, propName, typeMap);
|
|
49
|
+
replaceMethodCalls(cls, `set${capitalize(propName)}`, propName);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
project.save().then(() => {
|
|
55
|
+
console.log("Refactoring complete!");
|
|
56
|
+
});
|
|
57
|
+
function isEligibleGetter(methodName) {
|
|
58
|
+
return methodName.startsWith("get") && /^[A-Z][a-zA-Z0-9]*$/.test(methodName.slice(3)) && !methodName.includes("JSON");
|
|
59
|
+
}
|
|
60
|
+
function isEligibleSetter(methodName) {
|
|
61
|
+
return methodName.startsWith("set") && /^[A-Z][a-zA-Z0-9]*$/.test(methodName.slice(3));
|
|
62
|
+
}
|
|
63
|
+
function renamePropertyIfExists(cls, propName, properties) {
|
|
64
|
+
const existingProperty = properties.find(prop => prop.getName() === propName);
|
|
65
|
+
if (existingProperty) {
|
|
66
|
+
existingProperty.rename(`_${propName}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function createTypeMap(sourceFile) {
|
|
70
|
+
const typeMap = new Map();
|
|
71
|
+
const importDeclarations = sourceFile.getImportDeclarations();
|
|
72
|
+
importDeclarations.forEach(importDecl => {
|
|
73
|
+
const moduleSpecifier = importDecl.getModuleSpecifier().getText().replace(/['"]/g, '');
|
|
74
|
+
const absolutePath = path.resolve(sourceFile.getDirectory().getPath(), moduleSpecifier);
|
|
75
|
+
const normalizedPath = normalizePath(absolutePath);
|
|
76
|
+
const namedImports = importDecl.getNamedImports();
|
|
77
|
+
const defaultImport = importDecl.getDefaultImport();
|
|
78
|
+
namedImports.forEach(namedImport => {
|
|
79
|
+
console.log(`Named import: ${namedImport.getName()}, path: ${normalizedPath}`);
|
|
80
|
+
typeMap.set(namedImport.getName(), normalizedPath);
|
|
81
|
+
});
|
|
82
|
+
if (defaultImport) {
|
|
83
|
+
typeMap.set(defaultImport.getText(), normalizedPath);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return typeMap;
|
|
87
|
+
}
|
|
88
|
+
function refactorToGetter(cls, method, propName, typeMap) {
|
|
89
|
+
const getterName = propName;
|
|
90
|
+
const renamedProp = `_${propName}`;
|
|
91
|
+
const returnType = method.getReturnType().getText();
|
|
92
|
+
const simplifiedType = replaceLongTypePaths(returnType, typeMap);
|
|
93
|
+
const getterBody = method.getBodyText().replace(new RegExp(`this\\.${propName}`, 'g'), `this.${renamedProp}`);
|
|
94
|
+
cls.addGetAccessor({
|
|
95
|
+
name: getterName,
|
|
96
|
+
statements: getterBody,
|
|
97
|
+
// returnType: simplifiedType, // don't need a return type for getter
|
|
98
|
+
});
|
|
99
|
+
method.remove();
|
|
100
|
+
}
|
|
101
|
+
function refactorToSetter(cls, method, propName, typeMap) {
|
|
102
|
+
const setterName = propName;
|
|
103
|
+
const renamedProp = `_${propName}`;
|
|
104
|
+
const parameter = method.getParameters()[0];
|
|
105
|
+
const paramName = parameter.getName();
|
|
106
|
+
const paramType = replaceLongTypePaths(parameter.getType().getText(), typeMap);
|
|
107
|
+
const setterBody = method.getBodyText().replace(new RegExp(`this\\.${propName}`, 'g'), `this.${renamedProp}`);
|
|
108
|
+
cls.addSetAccessor({
|
|
109
|
+
name: setterName,
|
|
110
|
+
statements: setterBody,
|
|
111
|
+
parameters: [{ name: paramName, type: paramType }],
|
|
112
|
+
});
|
|
113
|
+
method.remove();
|
|
114
|
+
}
|
|
115
|
+
function replaceLongTypePaths(type, typeMap) {
|
|
116
|
+
for (const [importName, importPath] of typeMap.entries()) {
|
|
117
|
+
const longPath = `import("${importPath}")${importName}`;
|
|
118
|
+
const regex = new RegExp(`import\\(["']${normalizePath(importPath)}["']\\)\\.${importName}`, 'g');
|
|
119
|
+
if (regex.test(type)) {
|
|
120
|
+
return importName;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return type;
|
|
124
|
+
}
|
|
125
|
+
function normalizePath(filePath) {
|
|
126
|
+
return filePath.replace(/\\/g, '/');
|
|
127
|
+
}
|
|
128
|
+
function replaceMethodCalls(cls, methodName, propName) {
|
|
129
|
+
cls.getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression).forEach(callExpr => {
|
|
130
|
+
const expr = callExpr.getExpression();
|
|
131
|
+
if (expr.getText() === `this.${methodName}`) {
|
|
132
|
+
callExpr.replaceWithText(`this.${propName}`);
|
|
133
|
+
}
|
|
134
|
+
else if (expr.getText() === `this.${methodName}` && callExpr.getArguments().length > 0) {
|
|
135
|
+
callExpr.replaceWithText(`this.${propName} = ${callExpr.getArguments()[0].getText()}`);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function capitalize(str) {
|
|
140
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmYWN0b3ItZ2V0dGVyLXNldHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWZhY3RvcmVyL3JlZmFjdG9yLWdldHRlci1zZXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUE2RTtBQUM3RSwyQ0FBNkI7QUFFN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDOUIsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFDakYsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUzRixPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsSUFBSSxRQUFnQixDQUFDO1lBRXJCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsc0JBQXNCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pELGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDakQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsZ0JBQWdCLENBQUMsVUFBa0I7SUFDeEMsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNILENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFVBQWtCO0lBQ3hDLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEdBQVEsRUFBRSxRQUFnQixFQUFFLFVBQWlCO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM5RSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQXNCO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFOUQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDeEYsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVwRCxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLFdBQVcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLFFBQWdCLEVBQUUsT0FBNEI7SUFDM0YsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTlHLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDZixJQUFJLEVBQUUsVUFBVTtRQUNoQixVQUFVLEVBQUUsVUFBVTtRQUN0QixzRUFBc0U7S0FDekUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQVEsRUFBRSxNQUFXLEVBQUUsUUFBZ0IsRUFBRSxPQUE0QjtJQUMzRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUVuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUUvRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTlHLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDZixJQUFJLEVBQUUsVUFBVTtRQUNoQixVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0tBQ3JELENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsT0FBNEI7SUFDcEUsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFdBQVcsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGdCQUFnQixhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsUUFBZ0I7SUFDbkMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFxQixFQUFFLFVBQWtCLEVBQUUsUUFBZ0I7SUFDbkYsR0FBRyxDQUFDLG9CQUFvQixDQUFDLHFCQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ25FLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsVUFBVSxFQUFFLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RixRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsUUFBUSxNQUFNLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVc7SUFDM0IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsYXNzRGVjbGFyYXRpb24sIFByb2plY3QsIFNvdXJjZUZpbGUsIFN5bnRheEtpbmQgfSBmcm9tIFwidHMtbW9ycGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KCk7XG5wcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhcInNyYy9saWIvZmFtaXgvbW9kZWwvZmFtaXgvZmFtaXhfYmFzZV9lbGVtZW50LnRzXCIpO1xucHJvamVjdC5nZXRTb3VyY2VGaWxlcygpLmZvckVhY2goc291cmNlRmlsZSA9PiB7IGNvbnNvbGUubG9nKHNvdXJjZUZpbGUuZ2V0RmlsZVBhdGgoKSk7IH0pO1xuXG5wcm9qZWN0LmdldFNvdXJjZUZpbGVzKCkuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICBjb25zdCB0eXBlTWFwID0gY3JlYXRlVHlwZU1hcChzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IGNsYXNzZXMgPSBzb3VyY2VGaWxlLmdldENsYXNzZXMoKTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGNscy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGNscy5nZXRNZXRob2RzKCkuZm9yRWFjaChtZXRob2QgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG1ldGhvZC5nZXROYW1lKCk7XG4gICAgICAgICAgICBsZXQgcHJvcE5hbWU6IHN0cmluZztcblxuICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVHZXR0ZXIobWV0aG9kTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IG1ldGhvZE5hbWUuY2hhckF0KDMpLnRvTG93ZXJDYXNlKCkgKyBtZXRob2ROYW1lLnNsaWNlKDQpO1xuICAgICAgICAgICAgICAgIHJlbmFtZVByb3BlcnR5SWZFeGlzdHMoY2xzLCBwcm9wTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgcmVmYWN0b3JUb0dldHRlcihjbHMsIG1ldGhvZCwgcHJvcE5hbWUsIHR5cGVNYXApO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VNZXRob2RDYWxscyhjbHMsIGBnZXQke2NhcGl0YWxpemUocHJvcE5hbWUpfWAsIHByb3BOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNFbGlnaWJsZVNldHRlcihtZXRob2ROYW1lKSkge1xuICAgICAgICAgICAgICAgIHByb3BOYW1lID0gbWV0aG9kTmFtZS5jaGFyQXQoMykudG9Mb3dlckNhc2UoKSArIG1ldGhvZE5hbWUuc2xpY2UoNCk7XG4gICAgICAgICAgICAgICAgcmVuYW1lUHJvcGVydHlJZkV4aXN0cyhjbHMsIHByb3BOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICByZWZhY3RvclRvU2V0dGVyKGNscywgbWV0aG9kLCBwcm9wTmFtZSwgdHlwZU1hcCk7XG4gICAgICAgICAgICAgICAgcmVwbGFjZU1ldGhvZENhbGxzKGNscywgYHNldCR7Y2FwaXRhbGl6ZShwcm9wTmFtZSl9YCwgcHJvcE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuXG5wcm9qZWN0LnNhdmUoKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIlJlZmFjdG9yaW5nIGNvbXBsZXRlIVwiKTtcbn0pO1xuXG5mdW5jdGlvbiBpc0VsaWdpYmxlR2V0dGVyKG1ldGhvZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtZXRob2ROYW1lLnN0YXJ0c1dpdGgoXCJnZXRcIikgJiYgL15bQS1aXVthLXpBLVowLTldKiQvLnRlc3QobWV0aG9kTmFtZS5zbGljZSgzKSkgJiYgIW1ldGhvZE5hbWUuaW5jbHVkZXMoXCJKU09OXCIpO1xufVxuXG5mdW5jdGlvbiBpc0VsaWdpYmxlU2V0dGVyKG1ldGhvZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtZXRob2ROYW1lLnN0YXJ0c1dpdGgoXCJzZXRcIikgJiYgL15bQS1aXVthLXpBLVowLTldKiQvLnRlc3QobWV0aG9kTmFtZS5zbGljZSgzKSk7XG59XG5cbmZ1bmN0aW9uIHJlbmFtZVByb3BlcnR5SWZFeGlzdHMoY2xzOiBhbnksIHByb3BOYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IGFueVtdKSB7XG4gICAgY29uc3QgZXhpc3RpbmdQcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZChwcm9wID0+IHByb3AuZ2V0TmFtZSgpID09PSBwcm9wTmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nUHJvcGVydHkpIHtcbiAgICAgICAgZXhpc3RpbmdQcm9wZXJ0eS5yZW5hbWUoYF8ke3Byb3BOYW1lfWApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVHlwZU1hcChzb3VyY2VGaWxlOiBTb3VyY2VGaWxlKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgdHlwZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgaW1wb3J0RGVjbGFyYXRpb25zID0gc291cmNlRmlsZS5nZXRJbXBvcnREZWNsYXJhdGlvbnMoKTtcblxuICAgIGltcG9ydERlY2xhcmF0aW9ucy5mb3JFYWNoKGltcG9ydERlY2wgPT4ge1xuICAgICAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBpbXBvcnREZWNsLmdldE1vZHVsZVNwZWNpZmllcigpLmdldFRleHQoKS5yZXBsYWNlKC9bJ1wiXS9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShzb3VyY2VGaWxlLmdldERpcmVjdG9yeSgpLmdldFBhdGgoKSwgbW9kdWxlU3BlY2lmaWVyKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKGFic29sdXRlUGF0aCk7XG4gICAgICAgIGNvbnN0IG5hbWVkSW1wb3J0cyA9IGltcG9ydERlY2wuZ2V0TmFtZWRJbXBvcnRzKCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbXBvcnQgPSBpbXBvcnREZWNsLmdldERlZmF1bHRJbXBvcnQoKTtcblxuICAgICAgICBuYW1lZEltcG9ydHMuZm9yRWFjaChuYW1lZEltcG9ydCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgTmFtZWQgaW1wb3J0OiAke25hbWVkSW1wb3J0LmdldE5hbWUoKX0sIHBhdGg6ICR7bm9ybWFsaXplZFBhdGh9YCk7XG4gICAgICAgICAgICB0eXBlTWFwLnNldChuYW1lZEltcG9ydC5nZXROYW1lKCksIG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRJbXBvcnQpIHtcbiAgICAgICAgICAgIHR5cGVNYXAuc2V0KGRlZmF1bHRJbXBvcnQuZ2V0VGV4dCgpLCBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0eXBlTWFwO1xufVxuXG5mdW5jdGlvbiByZWZhY3RvclRvR2V0dGVyKGNsczogYW55LCBtZXRob2Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgdHlwZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPikge1xuICAgIGNvbnN0IGdldHRlck5hbWUgPSBwcm9wTmFtZTtcbiAgICBjb25zdCByZW5hbWVkUHJvcCA9IGBfJHtwcm9wTmFtZX1gO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmdldFRleHQoKTtcbiAgICBjb25zdCBzaW1wbGlmaWVkVHlwZSA9IHJlcGxhY2VMb25nVHlwZVBhdGhzKHJldHVyblR5cGUsIHR5cGVNYXApO1xuXG4gICAgY29uc3QgZ2V0dGVyQm9keSA9IG1ldGhvZC5nZXRCb2R5VGV4dCgpLnJlcGxhY2UobmV3IFJlZ0V4cChgdGhpc1xcXFwuJHtwcm9wTmFtZX1gLCAnZycpLCBgdGhpcy4ke3JlbmFtZWRQcm9wfWApO1xuXG4gICAgY2xzLmFkZEdldEFjY2Vzc29yKHtcbiAgICAgICAgbmFtZTogZ2V0dGVyTmFtZSxcbiAgICAgICAgc3RhdGVtZW50czogZ2V0dGVyQm9keSxcbiAgICAgICAgLy8gcmV0dXJuVHlwZTogc2ltcGxpZmllZFR5cGUsICAvLyBkb24ndCBuZWVkIGEgcmV0dXJuIHR5cGUgZm9yIGdldHRlclxuICAgIH0pO1xuXG4gICAgbWV0aG9kLnJlbW92ZSgpO1xufVxuXG5mdW5jdGlvbiByZWZhY3RvclRvU2V0dGVyKGNsczogYW55LCBtZXRob2Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgdHlwZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPikge1xuICAgIGNvbnN0IHNldHRlck5hbWUgPSBwcm9wTmFtZTtcbiAgICBjb25zdCByZW5hbWVkUHJvcCA9IGBfJHtwcm9wTmFtZX1gO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gbWV0aG9kLmdldFBhcmFtZXRlcnMoKVswXTtcbiAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuICAgIGNvbnN0IHBhcmFtVHlwZSA9IHJlcGxhY2VMb25nVHlwZVBhdGhzKHBhcmFtZXRlci5nZXRUeXBlKCkuZ2V0VGV4dCgpLCB0eXBlTWFwKTtcblxuICAgIGNvbnN0IHNldHRlckJvZHkgPSBtZXRob2QuZ2V0Qm9keVRleHQoKS5yZXBsYWNlKG5ldyBSZWdFeHAoYHRoaXNcXFxcLiR7cHJvcE5hbWV9YCwgJ2cnKSwgYHRoaXMuJHtyZW5hbWVkUHJvcH1gKTtcblxuICAgIGNscy5hZGRTZXRBY2Nlc3Nvcih7XG4gICAgICAgIG5hbWU6IHNldHRlck5hbWUsXG4gICAgICAgIHN0YXRlbWVudHM6IHNldHRlckJvZHksXG4gICAgICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6IHBhcmFtTmFtZSwgdHlwZTogcGFyYW1UeXBlIH1dLFxuICAgIH0pO1xuXG4gICAgbWV0aG9kLnJlbW92ZSgpO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlTG9uZ1R5cGVQYXRocyh0eXBlOiBzdHJpbmcsIHR5cGVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIGZvciAoY29uc3QgW2ltcG9ydE5hbWUsIGltcG9ydFBhdGhdIG9mIHR5cGVNYXAuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IGxvbmdQYXRoID0gYGltcG9ydChcIiR7aW1wb3J0UGF0aH1cIikke2ltcG9ydE5hbWV9YDtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBpbXBvcnRcXFxcKFtcIiddJHtub3JtYWxpemVQYXRoKGltcG9ydFBhdGgpfVtcIiddXFxcXClcXFxcLiR7aW1wb3J0TmFtZX1gLCAnZycpO1xuICAgICAgICBpZiAocmVnZXgudGVzdCh0eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGltcG9ydE5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU1ldGhvZENhbGxzKGNsczogQ2xhc3NEZWNsYXJhdGlvbiwgbWV0aG9kTmFtZTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gICAgY2xzLmdldERlc2NlbmRhbnRzT2ZLaW5kKFN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pLmZvckVhY2goY2FsbEV4cHIgPT4ge1xuICAgICAgICBjb25zdCBleHByID0gY2FsbEV4cHIuZ2V0RXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoZXhwci5nZXRUZXh0KCkgPT09IGB0aGlzLiR7bWV0aG9kTmFtZX1gKSB7XG4gICAgICAgICAgICBjYWxsRXhwci5yZXBsYWNlV2l0aFRleHQoYHRoaXMuJHtwcm9wTmFtZX1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHByLmdldFRleHQoKSA9PT0gYHRoaXMuJHttZXRob2ROYW1lfWAgJiYgY2FsbEV4cHIuZ2V0QXJndW1lbnRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2FsbEV4cHIucmVwbGFjZVdpdGhUZXh0KGB0aGlzLiR7cHJvcE5hbWV9ID0gJHtjYWxsRXhwci5nZXRBcmd1bWVudHMoKVswXS5nZXRUZXh0KCl9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const child_process_1 = require("child_process");
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
// Resolve the path to ts2famix-cli.js relative to the wrapper script
|
|
30
|
+
const cliPath = path.resolve(__dirname, 'ts2famix-cli.js');
|
|
31
|
+
// Allow tslog to display the proper TypeScript files and line numbers
|
|
32
|
+
const args = [
|
|
33
|
+
'--enable-source-maps',
|
|
34
|
+
'--experimental-specifier-resolution=node',
|
|
35
|
+
cliPath,
|
|
36
|
+
...process.argv.slice(2)
|
|
37
|
+
];
|
|
38
|
+
const child = (0, child_process_1.spawn)('node', args, { stdio: 'inherit' });
|
|
39
|
+
child.on('close', (code) => {
|
|
40
|
+
process.exit(code);
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHMyZmFtaXgtY2xpLXdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHMyZmFtaXgtY2xpLXdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxpREFBc0M7QUFDdEMsMkNBQTZCO0FBRTdCLHFFQUFxRTtBQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRTNELHNFQUFzRTtBQUN0RSxNQUFNLElBQUksR0FBRztJQUNYLHNCQUFzQjtJQUN0QiwwQ0FBMEM7SUFDMUMsT0FBTztJQUNQLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ3pCLENBQUM7QUFFRixNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFLLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBRXhELEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbi8vIFJlc29sdmUgdGhlIHBhdGggdG8gdHMyZmFtaXgtY2xpLmpzIHJlbGF0aXZlIHRvIHRoZSB3cmFwcGVyIHNjcmlwdFxuY29uc3QgY2xpUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICd0czJmYW1peC1jbGkuanMnKTtcblxuLy8gQWxsb3cgdHNsb2cgdG8gZGlzcGxheSB0aGUgcHJvcGVyIFR5cGVTY3JpcHQgZmlsZXMgYW5kIGxpbmUgbnVtYmVyc1xuY29uc3QgYXJncyA9IFtcbiAgJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgJy0tZXhwZXJpbWVudGFsLXNwZWNpZmllci1yZXNvbHV0aW9uPW5vZGUnLFxuICBjbGlQYXRoLFxuICAuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMilcbl07XG5cbmNvbnN0IGNoaWxkID0gc3Bhd24oJ25vZGUnLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG5cbmNoaWxkLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gIHByb2Nlc3MuZXhpdChjb2RlKTtcbn0pO1xuIl19
|
package/dist/ts2famix-cli.js
CHANGED
|
@@ -56,8 +56,14 @@ const importer = new analyze_1.Importer();
|
|
|
56
56
|
let famixRep;
|
|
57
57
|
if (argv.input.endsWith('tsconfig.json')) {
|
|
58
58
|
const tsConfigFilePath = argv.input;
|
|
59
|
+
// get the baseUrl from the tsconfig file
|
|
60
|
+
const baseUrl = tsConfigFilePath.substring(0, tsConfigFilePath.lastIndexOf('/'));
|
|
61
|
+
analyze_3.logger.info(`baseUrl: ${baseUrl}`);
|
|
59
62
|
const project = new ts_morph_1.Project({
|
|
60
|
-
tsConfigFilePath
|
|
63
|
+
tsConfigFilePath,
|
|
64
|
+
compilerOptions: {
|
|
65
|
+
baseUrl: baseUrl,
|
|
66
|
+
}
|
|
61
67
|
});
|
|
62
68
|
famixRep = importer.famixRepFromProject(project);
|
|
63
69
|
}
|
|
@@ -74,3 +80,4 @@ fs.writeFile(jsonFilePath, jsonOutput, (err) => {
|
|
|
74
80
|
}
|
|
75
81
|
});
|
|
76
82
|
analyze_3.logger.info(`Created: ${jsonFilePath}`);
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHMyZmFtaXgtY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RzMmZhbWl4LWNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVDQUF5QjtBQUN6QixrREFBMEI7QUFDMUIsdUNBQXFDO0FBRXJDLHVDQUFtQztBQUNuQyx1Q0FBbUM7QUFFbkMsTUFBTSxJQUFJLEdBQUcsZUFBSztLQUNiLE9BQU8sQ0FBQyxzRUFBc0UsRUFBRSx3REFBd0QsQ0FBQztLQUN6SSxPQUFPLENBQUMsa0VBQWtFLEVBQUUsc0RBQXNELENBQUM7S0FDbkksS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7S0FDbkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDYixLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztLQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUNiLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO0tBQ3RCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ2IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDZixRQUFRLENBQUMsR0FBRyxFQUFFLDhGQUE4RixDQUFDO0tBQzdHLE9BQU8sQ0FBQyxXQUFXLENBQUM7S0FDcEIsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUM7S0FDM0IsUUFBUSxDQUFDLFdBQVcsRUFBRSxzSUFBc0ksQ0FBQztLQUM3SixZQUFZLENBQUMsT0FBTyxDQUFDO0tBQ3JCLFlBQVksQ0FBQyxRQUFRLENBQUM7S0FDdEIsU0FBUyxFQUFFLENBQUM7QUFFakIsdUNBQW1DO0FBQ25DLGdCQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBVyxDQUFDO0FBQzNELGdCQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFvQixDQUFDO0FBRW5ELE1BQU0sUUFBUSxHQUFHLElBQUksa0JBQVEsRUFBRSxDQUFDO0FBQ2hDLElBQUksUUFBeUIsQ0FBQztBQUU5QixJQUFLLElBQUksQ0FBQyxLQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQWUsQ0FBQztJQUM5Qyx5Q0FBeUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixnQkFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxDQUFDO1FBQ3hCLGdCQUFnQjtRQUNoQixlQUFlLEVBQUU7WUFDYixPQUFPLEVBQUUsT0FBTztTQUNuQjtLQUNGLENBQUMsQ0FBQztJQUNMLFFBQVEsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFckQsQ0FBQztLQUFNLENBQUM7SUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO0lBQ2pDLFFBQVEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztBQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBZ0IsQ0FBQztBQUUzQyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUMzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQUMsTUFBTSxHQUFHLENBQUM7SUFBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQyxDQUFDO0FBRUgsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgeyBJbXBvcnRlciB9IGZyb20gJy4vYW5hbHl6ZSc7XG5pbXBvcnQgeyBGYW1peFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9saWIvZmFtaXgvZmFtaXhfcmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCJ0cy1tb3JwaFwiO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vYW5hbHl6ZVwiO1xuXG5jb25zdCBhcmd2ID0geWFyZ3NcbiAgICAuZXhhbXBsZShgdHMyZmFtaXggLWkgXCJwYXRoL3RvL3Byb2plY3QvKiovKi50c1wiIC1vIEpTT05Nb2RlbHMvcHJvamVjdE5hbWUuanNvbmAsICdDcmVhdGVzIGEgSlNPTi1mb3JtYXQgRmFtaXggbW9kZWwgb2YgdHlwZXNjcmlwdCBmaWxlcy4nKVxuICAgIC5leGFtcGxlKGB0czJmYW1peCAtaSBwYXRoL3RvL3RzY29uZmlnLmpzb24gLW8gSlNPTk1vZGVscy9wcm9qZWN0TmFtZS5qc29uYCwgJ0NyZWF0ZXMgYSBKU09OLWZvcm1hdCBtb2RlbCBvZiBhIHR5cGVzY3JpcHQgcHJvamVjdC4nKVxuICAgIC5hbGlhcygnaScsICdpbnB1dCcpXG4gICAgLm5hcmdzKCdpJywgMSlcbiAgICAuYWxpYXMoJ28nLCAnb3V0cHV0JylcbiAgICAubmFyZ3MoJ28nLCAxKVxuICAgIC5hbGlhcygnbCcsICdsb2dsZXZlbCcpXG4gICAgLm5hcmdzKCdsJywgMSlcbiAgICAuZGVmYXVsdCgnbCcsIDMpXG4gICAgLmRlc2NyaWJlKCdsJywgJ1NldCBtaW5pbXVtIGxvZ2dpbmcgbGV2ZWwgMDogc2lsbHksIDE6IHRyYWNlLCAyOiBkZWJ1ZywgMzogaW5mbywgNDogd2FybiwgNTogZXJyb3IsIDY6IGZhdGFsJylcbiAgICAuYm9vbGVhbignZ3JhcGhlbWVzJylcbiAgICAuZGVmYXVsdCgnZ3JhcGhlbWVzJywgZmFsc2UpXG4gICAgLmRlc2NyaWJlKCdncmFwaGVtZXMnLCAnUHJvY2VzcyBncmFwaGVtZXMgKG91dHNpZGUgb2YgdGhlIEJNUCkgdG8gYXZvaWQgc291cmNlIGFuY2hvciBvZmZzZXQgZXJyb3JzIChkdWUgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLCB0aGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpJylcbiAgICAuZGVtYW5kT3B0aW9uKCdpbnB1dCcpXG4gICAgLmRlbWFuZE9wdGlvbignb3V0cHV0JylcbiAgICAucGFyc2VTeW5jKCk7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vYW5hbHl6ZSc7XG5sb2dnZXIuc2V0dGluZ3MubWluTGV2ZWwgPSBOdW1iZXIoYXJndi5sb2dsZXZlbCkgYXMgbnVtYmVyO1xuY29uZmlnLmV4cGVjdEdyYXBoZW1lcyA9IGFyZ3YuZ3JhcGhlbWVzIGFzIGJvb2xlYW47XG5cbmNvbnN0IGltcG9ydGVyID0gbmV3IEltcG9ydGVyKCk7XG5sZXQgZmFtaXhSZXA6IEZhbWl4UmVwb3NpdG9yeTtcblxuaWYgKChhcmd2LmlucHV0IGFzIHN0cmluZykuZW5kc1dpdGgoJ3RzY29uZmlnLmpzb24nKSkge1xuICAgIGNvbnN0IHRzQ29uZmlnRmlsZVBhdGggPSBhcmd2LmlucHV0IGFzIHN0cmluZztcbiAgICAvLyBnZXQgdGhlIGJhc2VVcmwgZnJvbSB0aGUgdHNjb25maWcgZmlsZVxuICAgIGNvbnN0IGJhc2VVcmwgPSB0c0NvbmZpZ0ZpbGVQYXRoLnN1YnN0cmluZygwLCB0c0NvbmZpZ0ZpbGVQYXRoLmxhc3RJbmRleE9mKCcvJykpO1xuICAgIGxvZ2dlci5pbmZvKGBiYXNlVXJsOiAke2Jhc2VVcmx9YCk7XG4gICAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcbiAgICAgICAgdHNDb25maWdGaWxlUGF0aCxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBiYXNlVXJsOiBiYXNlVXJsLFxuICAgICAgICB9XG4gICAgICB9KTsgXG4gICAgZmFtaXhSZXAgPSBpbXBvcnRlci5mYW1peFJlcEZyb21Qcm9qZWN0KHByb2plY3QpO1xuXG59IGVsc2Uge1xuICAgIGNvbnN0IHBhdGhzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBwYXRocy5wdXNoKGFyZ3YuaW5wdXQgYXMgc3RyaW5nKTtcbiAgICBmYW1peFJlcCA9IGltcG9ydGVyLmZhbWl4UmVwRnJvbVBhdGhzKHBhdGhzKTtcbn1cblxuY29uc3QganNvbk91dHB1dCA9IGZhbWl4UmVwLmV4cG9ydCh7Zm9ybWF0OiBcImpzb25cIn0pO1xuY29uc3QganNvbkZpbGVQYXRoID0gYXJndi5vdXRwdXQgYXMgc3RyaW5nO1xuXG5mcy53cml0ZUZpbGUoanNvbkZpbGVQYXRoLCBqc29uT3V0cHV0LCAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikgeyB0aHJvdyBlcnI7IH1cbn0pO1xuXG5sb2dnZXIuaW5mbyhgQ3JlYXRlZDogJHtqc29uRmlsZVBhdGh9YCk7IFxuIl19
|
|
@@ -51,3 +51,4 @@ fs.writeFile(jsonFilePath, jsonOutput, (err) => {
|
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
53
|
console.info(`Created: ${jsonFilePath}`);
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHMyZmFtaXgtdHNjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHMyZmFtaXgtdHNjb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QixrREFBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLHVDQUFtQztBQUVuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGtCQUFRLEVBQUUsQ0FBQztBQUVoQyxNQUFNLElBQUksR0FBRyxlQUFLO0tBQ2YsT0FBTyxDQUFDLHFHQUFxRyxFQUFFLHFEQUFxRCxDQUFDO0tBQ3JLLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO0tBQ25CLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ2IsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7S0FDcEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDYixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBRTVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQWUsQ0FBQztBQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFPLENBQUM7SUFDMUIsZ0JBQWdCO0NBQ2pCLENBQUMsQ0FBQztBQUVILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQWdCLENBQUM7QUFFM0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDN0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUFDLE1BQU0sR0FBRyxDQUFDO0lBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XHJcbmltcG9ydCB5YXJncyBmcm9tIFwieWFyZ3NcIjtcclxuaW1wb3J0IHsgSW1wb3J0ZXIgfSBmcm9tIFwiLi9hbmFseXplXCI7XHJcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwidHMtbW9ycGhcIjtcclxuXHJcbmNvbnN0IGltcG9ydGVyID0gbmV3IEltcG9ydGVyKCk7XHJcblxyXG5jb25zdCBhcmd2ID0geWFyZ3NcclxuICAuZXhhbXBsZShgdHMtbm9kZSBzcmMvdHMyZmFtaXgtdHNjb25maWcudHMgLWkgLi4vcGF0aC90by9wcm9qZWN0L3RzY29uZmlnLmpzb24gLW8gSlNPTk1vZGVscy9wcm9qZWN0TmFtZS5qc29uYCwgJ2NyZWF0ZXMgYSBKU09OLWZvcm1hdCBtb2RlbCBvZiBhIHR5cGVzY3JpcHQgcHJvamVjdCcpXHJcbiAgLmFsaWFzKCdpJywgJ2lucHV0JylcclxuICAubmFyZ3MoJ2knLCAxKVxyXG4gIC5hbGlhcygnbycsICdvdXRwdXQnKVxyXG4gIC5uYXJncygnbycsIDEpXHJcbiAgLmRlbWFuZE9wdGlvbignaW5wdXQnKS5kZW1hbmRPcHRpb24oJ291dHB1dCcpLnBhcnNlU3luYygpO1xyXG5cclxuY29uc3QgdHNDb25maWdGaWxlUGF0aCA9IGFyZ3YuaW5wdXQgYXMgc3RyaW5nO1xyXG5cclxuY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcclxuICB0c0NvbmZpZ0ZpbGVQYXRoXHJcbn0pOyAgXHJcblxyXG5jb25zdCBmYW1peFJlcCA9IGltcG9ydGVyLmZhbWl4UmVwRnJvbVByb2plY3QocHJvamVjdCk7XHJcbmNvbnN0IGpzb25PdXRwdXQgPSBmYW1peFJlcC5nZXRKU09OKCk7XHJcbmNvbnN0IGpzb25GaWxlUGF0aCA9IGFyZ3Yub3V0cHV0IGFzIHN0cmluZztcclxuXHJcbmZzLndyaXRlRmlsZShqc29uRmlsZVBhdGgsIGpzb25PdXRwdXQsIChlcnIpID0+IHtcclxuICBpZiAoZXJyKSB7IHRocm93IGVycjsgfVxyXG59KTtcclxuXHJcbmNvbnNvbGUuaW5mbyhgQ3JlYXRlZDogJHtqc29uRmlsZVBhdGh9YCk7IFxyXG4iXX0=
|