ts2famix 1.4.0 → 2.0.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.
Files changed (119) hide show
  1. package/README.md +1 -1
  2. package/dist/analyze.js +6 -3
  3. package/dist/analyze_functions/process_functions.js +248 -100
  4. package/dist/famix2puml.js +1 -0
  5. package/dist/famix_functions/EntityDictionary.js +661 -155
  6. package/dist/famix_functions/helpers_creation.js +26 -6
  7. package/dist/fqn.js +156 -69
  8. package/dist/lib/famix/src/famix_JSON_exporter.js +1 -0
  9. package/dist/lib/famix/src/famix_base_element.js +1 -0
  10. package/dist/lib/famix/src/famix_repository.js +9 -8
  11. package/dist/lib/famix/src/index.js +1 -0
  12. package/dist/lib/famix/src/model/famix/access.js +3 -2
  13. package/dist/lib/famix/src/model/famix/accessor.js +1 -0
  14. package/dist/lib/famix/src/model/famix/alias.js +2 -1
  15. package/dist/lib/famix/src/model/famix/arrowFunction.js +17 -0
  16. package/dist/lib/famix/src/model/famix/behavioral_entity.js +13 -15
  17. package/dist/lib/famix/src/model/famix/class.js +1 -0
  18. package/dist/lib/famix/src/model/famix/comment.js +2 -1
  19. package/dist/lib/famix/src/model/famix/concretisation.js +31 -0
  20. package/dist/lib/famix/src/model/famix/container_entity.js +7 -6
  21. package/dist/lib/famix/src/model/famix/decorator.js +2 -1
  22. package/dist/lib/famix/src/model/famix/entity.js +1 -0
  23. package/dist/lib/famix/src/model/famix/enum.js +2 -1
  24. package/dist/lib/famix/src/model/famix/enum_value.js +2 -1
  25. package/dist/lib/famix/src/model/famix/function.js +1 -0
  26. package/dist/lib/famix/src/model/famix/implicit_variable.js +1 -0
  27. package/dist/lib/famix/src/model/famix/import_clause.js +5 -3
  28. package/dist/lib/famix/src/model/famix/index.js +18 -11
  29. package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +3 -2
  30. package/dist/lib/famix/src/model/famix/inheritance.js +3 -2
  31. package/dist/lib/famix/src/model/famix/interface.js +2 -1
  32. package/dist/lib/famix/src/model/famix/invocation.js +3 -2
  33. package/dist/lib/famix/src/model/famix/method.js +2 -1
  34. package/dist/lib/famix/src/model/famix/module.js +53 -0
  35. package/dist/lib/famix/src/model/famix/named_entity.js +4 -3
  36. package/dist/lib/famix/src/model/famix/parameter.js +2 -1
  37. package/dist/lib/famix/src/model/famix/parameterConcretisation.js +44 -0
  38. package/dist/lib/famix/src/model/famix/parameter_type.js +22 -1
  39. package/dist/lib/famix/src/model/famix/parametric_arrow_function.js +31 -0
  40. package/dist/lib/famix/src/model/famix/parametric_class.js +44 -0
  41. package/dist/lib/famix/src/model/famix/parametric_function.js +31 -0
  42. package/dist/lib/famix/src/model/famix/parametric_interface.js +44 -0
  43. package/dist/lib/famix/src/model/famix/parametric_method.js +31 -0
  44. package/dist/lib/famix/src/model/famix/primitive_type.js +1 -0
  45. package/dist/lib/famix/src/model/famix/property.js +91 -9
  46. package/dist/lib/famix/src/model/famix/reference.js +3 -2
  47. package/dist/lib/famix/src/model/famix/scoping_entity.js +12 -10
  48. package/dist/lib/famix/src/model/famix/script_entity.js +1 -2
  49. package/dist/lib/famix/src/model/famix/source_anchor.js +1 -0
  50. package/dist/lib/famix/src/model/famix/source_language.js +1 -1
  51. package/dist/lib/famix/src/model/famix/sourced_entity.js +2 -1
  52. package/dist/lib/famix/src/model/famix/structural_entity.js +1 -0
  53. package/dist/lib/famix/src/model/famix/text_anchor.js +1 -0
  54. package/dist/lib/famix/src/model/famix/type.js +6 -4
  55. package/dist/lib/famix/src/model/famix/variable.js +1 -0
  56. package/dist/lib/ts-complex/cyclomatic-service.js +2 -2
  57. package/dist/ts2famix-cli-wrapper.js +16 -0
  58. package/dist/ts2famix-cli.js +8 -1
  59. package/dist/ts2famix-tsconfig.js +1 -0
  60. package/doc-uml/famix-typescript-model.puml +559 -0
  61. package/doc-uml/famix-typescript-model.svg +1 -0
  62. package/jest.config.json +2 -1
  63. package/package.json +10 -10
  64. package/src/analyze.ts +25 -22
  65. package/src/analyze_functions/process_functions.ts +272 -96
  66. package/src/famix_functions/EntityDictionary.ts +731 -182
  67. package/src/famix_functions/helpers_creation.ts +28 -2
  68. package/src/fqn.ts +132 -10
  69. package/src/lib/famix/src/famix_repository.ts +9 -9
  70. package/src/lib/famix/src/model/famix/access.ts +2 -2
  71. package/src/lib/famix/src/model/famix/alias.ts +1 -1
  72. package/src/lib/famix/src/model/famix/arrowFunction.ts +15 -0
  73. package/src/lib/famix/src/model/famix/behavioral_entity.ts +12 -19
  74. package/src/lib/famix/src/model/famix/comment.ts +1 -1
  75. package/src/lib/famix/src/model/famix/concretisation.ts +42 -0
  76. package/src/lib/famix/src/model/famix/container_entity.ts +6 -6
  77. package/src/lib/famix/src/model/famix/decorator.ts +1 -1
  78. package/src/lib/famix/src/model/famix/enum.ts +1 -1
  79. package/src/lib/famix/src/model/famix/enum_value.ts +1 -1
  80. package/src/lib/famix/src/model/famix/import_clause.ts +4 -3
  81. package/src/lib/famix/src/model/famix/index.ts +8 -5
  82. package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +2 -2
  83. package/src/lib/famix/src/model/famix/inheritance.ts +3 -4
  84. package/src/lib/famix/src/model/famix/interface.ts +1 -1
  85. package/src/lib/famix/src/model/famix/invocation.ts +2 -2
  86. package/src/lib/famix/src/model/famix/method.ts +1 -1
  87. package/src/lib/famix/src/model/famix/module.ts +67 -1
  88. package/src/lib/famix/src/model/famix/named_entity.ts +3 -3
  89. package/src/lib/famix/src/model/famix/parameter.ts +1 -1
  90. package/src/lib/famix/src/model/famix/parameterConcretisation.ts +54 -0
  91. package/src/lib/famix/src/model/famix/parameter_type.ts +33 -6
  92. package/src/lib/famix/src/model/famix/parametric_arrow_function.ts +32 -0
  93. package/src/lib/famix/src/model/famix/parametric_class.ts +49 -0
  94. package/src/lib/famix/src/model/famix/parametric_function.ts +32 -0
  95. package/src/lib/famix/src/model/famix/parametric_interface.ts +49 -0
  96. package/src/lib/famix/src/model/famix/parametric_method.ts +32 -0
  97. package/src/lib/famix/src/model/famix/property.ts +109 -11
  98. package/src/lib/famix/src/model/famix/reference.ts +2 -2
  99. package/src/lib/famix/src/model/famix/scoping_entity.ts +12 -11
  100. package/src/lib/famix/src/model/famix/script_entity.ts +0 -2
  101. package/src/lib/famix/src/model/famix/source_language.ts +0 -1
  102. package/src/lib/famix/src/model/famix/sourced_entity.ts +1 -1
  103. package/src/lib/famix/src/model/famix/type.ts +5 -4
  104. package/src/ts2famix-cli-wrapper.ts +17 -0
  105. package/src/ts2famix-cli.ts +7 -1
  106. package/tsconfig.json +5 -5
  107. package/dist/lib/famix/src/model/famix/association.js +0 -36
  108. package/dist/lib/famix/src/model/famix/namespace.js +0 -24
  109. package/dist/lib/famix/src/model/famix/parameterizable_class.js +0 -30
  110. package/dist/lib/famix/src/model/famix/parameterizable_interface.js +0 -30
  111. package/dist/lib/famix/src/model/famix/parameterized_type.js +0 -36
  112. package/doc-uml/metamodel-full.svg +0 -1
  113. package/doc-uml/metamodel.svg +0 -1
  114. package/plantuml.jar +0 -0
  115. package/src/lib/famix/src/model/famix/association.ts +0 -44
  116. package/src/lib/famix/src/model/famix/namespace.ts +0 -28
  117. package/src/lib/famix/src/model/famix/parameterizable_class.ts +0 -31
  118. package/src/lib/famix/src/model/famix/parameterizable_interface.ts +0 -31
  119. package/src/lib/famix/src/model/famix/parameterized_type.ts +0 -40
@@ -123,3 +123,4 @@ function propertiesToPlantUML(element) {
123
123
  }
124
124
  return plantUMLString;
125
125
  }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaXgycHVtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYW1peDJwdW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsa0RBQTBCO0FBRTFCLE1BQU0sSUFBSSxHQUFHLGVBQUs7S0FDYixPQUFPLENBQUMseUZBQXlGLEVBQUUsbUZBQW1GLENBQUM7S0FDdkwsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7S0FDbkIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDYixLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztLQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUNiLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFFOUQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUM7QUFldEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQWUsQ0FBQztBQUMxQyxNQUFNLFlBQVksR0FBSSxJQUFJLENBQUMsTUFBaUIsQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLE1BQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsRUFBRyxJQUFJLENBQUMsTUFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6SSxNQUFNLFdBQVcsR0FBa0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7QUFFOUMsbUNBQW1DO0FBQ25DLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVB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LGtDQUFrQztvQkFDbEMsY0FBYyxJQUFJLEdBQUcsUUFBUSxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUM3RCxDQUFDO2dCQUVELE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuXG5jb25zdCBhcmd2ID0geWFyZ3NcbiAgICAuZXhhbXBsZSgndHMtbm9kZSBzcmMvZmFtaXgycHVtbC50cyAtaSBKU09OTW9kZWxzL3Byb2plY3ROYW1lLmpzb24gLW8gUFVNTE1vZGVscy9wcm9qZWN0TmFtZS5wdW1sJywgJ2NyZWF0ZXMgYSBQbGFudFVNTCBjbGFzcyBkaWFncmFtIGZyb20gYSBKU09OLWZvcm1hdCBtb2RlbCBvZiBhIHR5cGVzY3JpcHQgcHJvamVjdCcpXG4gICAgLmFsaWFzKCdpJywgJ2lucHV0JylcbiAgICAubmFyZ3MoJ2knLCAxKVxuICAgIC5hbGlhcygnbycsICdvdXRwdXQnKVxuICAgIC5uYXJncygnbycsIDEpXG4gICAgLmRlbWFuZE9wdGlvbignaW5wdXQnKS5kZW1hbmRPcHRpb24oJ291dHB1dCcpLnBhcnNlU3luYygpO1xuXG5jb25zdCBJTkhFUklUQU5DRV9MSU5LX0NPTE9SID0gJ2JsdWUnO1xuXG4vLyBhcHByb3hpbWF0aW9uIGZvciBjb2RlIGNvbXBsZXRpb25cbmludGVyZmFjZSBGYW1peFR5cGVTY3JpcHRFbGVtZW50IHtcbiAgICBGTTM6IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGlkPzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBBc3NvY2lhdGlvbiB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBqc29uRmlsZU5hbWUgPSBhcmd2LmlucHV0IGFzIHN0cmluZztcbmNvbnN0IHB1bWxGaWxlTmFtZSA9IChhcmd2Lm91dHB1dCBhcyBzdHJpbmcpLnN1YnN0cmluZygoYXJndi5vdXRwdXQgYXMgc3RyaW5nKS5pbmRleE9mKFwiL1wiKSsxLCAoYXJndi5vdXRwdXQgYXMgc3RyaW5nKS5sYXN0SW5kZXhPZignLicpKTtcbmNvbnN0IHBhcnNlZE1vZGVsOiBBcnJheTxGYW1peFR5cGVTY3JpcHRFbGVtZW50PiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlTmFtZSwgJ3V0Zi04JykpO1xuY29uc3QgY2xhc3NOYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbmNvbnN0IGFzc29jaWF0aW9ucyA9IG5ldyBBcnJheTxBc3NvY2lhdGlvbj4oKTtcblxuLy8gbWFwcyBhbGwgY2xhc3MgbmFtZXMgdG8gdGhlaXIgaWRcbnBhcnNlZE1vZGVsLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgLy8gbWFwIGhhcyBpZCBhcyBrZXkgYW5kIHVuaXF1ZSAocGxhbnR1bWwpIGNsYXNzIG5hbWVcbiAgICBjbGFzc05hbWVNYXAuc2V0KGVsZW1lbnQuaWQsIHVuaXF1ZUVsZW1lbnROYW1lKGVsZW1lbnQpKTtcbiAgICBjb25zdCBuYW1lV2l0aG91dFByZWZpeCA9IGVsZW1lbnQuRk0zLnNwbGl0KCcuJylbMV07XG4gICAgLy8gc3BlY2lhbCBjYXNlIGFzc29jaWF0aW9uXG4gICAgaWYgKG5hbWVXaXRob3V0UHJlZml4LmVuZHNXaXRoKCdJbmhlcml0YW5jZScpKSB7XG4gICAgICAgIGNvbnN0IHN1YmNsYXNzID0gZWxlbWVudFsnc3ViY2xhc3MnXS5yZWY7XG4gICAgICAgIGNvbnN0IHN1cGVyY2xhc3MgPSBlbGVtZW50WydzdXBlcmNsYXNzJ10ucmVmO1xuICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGZyb206IHN1YmNsYXNzLCB0bzogc3VwZXJjbGFzcywgbmFtZTogbmFtZVdpdGhvdXRQcmVmaXggfSk7XG4gICAgfVxufSk7XG5cbi8vIGdlbmVyYXRlcyBwbGFudHVtbFxubGV0IHBsYW50VU1MT3V0U3RyaW5nID0gYEBzdGFydHVtbCAke3B1bWxGaWxlTmFtZX1cbnNraW5wYXJhbSBzdHlsZSBzdHJpY3R1bWxcbnRpdGxlIE9iamVjdCBkaWFncmFtIGZvciAke2pzb25GaWxlTmFtZX1cbmA7XG5wYXJzZWRNb2RlbC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIHBsYW50VU1MT3V0U3RyaW5nICs9IGAke3RvUGxhbnRVTUwoZWxlbWVudCl9XFxuYDtcbn0pO1xuXG4vLyBjcmVhdGVzIGFzc29jaWF0aW9uc1xuYXNzb2NpYXRpb25zLmZvckVhY2goYXNzb2NpYXRpb24gPT4ge1xuICAgIC8vIGluaGVyaXRhbmNlIGlzIGEgc3BlY2lhbCBjYXNlLCBzaG93IGl0IGluIFVNTCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IG1ha2UgMTAwJSBzZW5zZSBpbiBvYmplY3QgZGlhZ3JhbXNcbiAgICBjb25zdCBpc0luaGVyaXRhbmNlID0gYXNzb2NpYXRpb24ubmFtZS5zdGFydHNXaXRoKCdJbmhlcml0YW5jZScpO1xuICAgIGlmIChpc0luaGVyaXRhbmNlKSB7XG4gICAgICAgIHBsYW50VU1MT3V0U3RyaW5nICs9IGAke2NsYXNzTmFtZU1hcC5nZXQoYXNzb2NpYXRpb24uZnJvbSl9IC0tfD4gJHtjbGFzc05hbWVNYXAuZ2V0KGFzc29jaWF0aW9uLnRvKX0gI2xpbmU6JHtJTkhFUklUQU5DRV9MSU5LX0NPTE9SfVxcbmA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGxhbnRVTUxPdXRTdHJpbmcgKz0gYCR7Y2xhc3NOYW1lTWFwLmdldChhc3NvY2lhdGlvbi5mcm9tKX0gLi4+IFwiJHthc3NvY2lhdGlvbi5uYW1lfVwiICR7Y2xhc3NOYW1lTWFwLmdldChhc3NvY2lhdGlvbi50byl9XFxuYDtcbiAgICB9XG59KTtcblxucGxhbnRVTUxPdXRTdHJpbmcgKz0gJ0BlbmR1bWwnO1xuXG4vLyB3cml0ZXMgdG8gb3V0cHV0IGZpbGVcbmZzLndyaXRlRmlsZShhcmd2Lm91dHB1dCBhcyBzdHJpbmcsIHBsYW50VU1MT3V0U3RyaW5nLCAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikgeyB0aHJvdyBlcnI7IH1cbn0pO1xuXG5mdW5jdGlvbiB1bmlxdWVFbGVtZW50TmFtZShlbGVtZW50OiBGYW1peFR5cGVTY3JpcHRFbGVtZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZWxlbWVudC5GTTN9JHtlbGVtZW50LmlkfWA7XG59XG5cbmZ1bmN0aW9uIHRvUGxhbnRVTUwoZWxlbWVudDogRmFtaXhUeXBlU2NyaXB0RWxlbWVudCkge1xuICAgIGxldCBwbGFudFVNTFN0cmluZyA9ICcnO1xuICAgIGNvbnN0IG9wdGlvbmFsTmFtZSA9IGVsZW1lbnQubmFtZSB8fCAnJztcbiAgICBjb25zdCBuYW1lV2l0aG91dFByZWZpeCA9IGVsZW1lbnQuRk0zLnNwbGl0KCcuJylbMV07XG4gICAgcGxhbnRVTUxTdHJpbmcgKz0gYG9iamVjdCBcIiR7b3B0aW9uYWxOYW1lfToke25hbWVXaXRob3V0UHJlZml4fVwiIGFzICR7dW5pcXVlRWxlbWVudE5hbWUoZWxlbWVudCl9IHtcXG5gO1xuICAgIHBsYW50VU1MU3RyaW5nICs9IGBpZCA9ICR7ZWxlbWVudC5pZH1cXG5gO1xuICAgIHBsYW50VU1MU3RyaW5nICs9IHByb3BlcnRpZXNUb1BsYW50VU1MKGVsZW1lbnQpO1xuICAgIHBsYW50VU1MU3RyaW5nICs9ICd9XFxuJztcbiAgICByZXR1cm4gcGxhbnRVTUxTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNUb1BsYW50VU1MKGVsZW1lbnQ6IEZhbWl4VHlwZVNjcmlwdEVsZW1lbnQpIHtcbiAgICBsZXQgcGxhbnRVTUxTdHJpbmcgPSAnJztcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZWxlbWVudFtwcm9wZXJ0eV07XG4gICAgICAgIGNvbnN0IGlzT25lVG9NYW55UmVmZXJlbmNlID0gdHlwZW9mIGF0dHJpYnV0ZSAhPT0gJ3N0cmluZycgJiYgYXR0cmlidXRlLmxlbmd0aDsgLy8gYXJyYXkgYnV0IG5vdCBhIHN0cmluZ1xuXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZXMgdGhlc2UgcHJvcGVydGllc1xuICAgICAgICAgICAgY2FzZSAnc3ViY2xhc3MnOlxuICAgICAgICAgICAgY2FzZSAnc3VwZXJjbGFzcyc6XG4gICAgICAgICAgICBjYXNlICdGTTMnOlxuICAgICAgICAgICAgY2FzZSAnaWQnOlxuICAgICAgICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzT25lVG9NYW55UmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5mb3JFYWNoKChjb21wb3NpdGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGZyb206IGVsZW1lbnQuaWQsIHRvOiBjb21wb3NpdGUucmVmLCBuYW1lOiBgJHtwcm9wZXJ0eX1bJHtpbmRleH1dYCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXR0cmlidXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGZyb206IGVsZW1lbnQuaWQsIHRvOiBhdHRyaWJ1dGUucmVmLCBuYW1lOiBwcm9wZXJ0eSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAgLy8gdHlwZW9mIHN0cmluZywgYm9vbGVhbiwgbnVtYmVyLCBldGNcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJlYXRzIGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICBwbGFudFVNTFN0cmluZyArPSBgJHtwcm9wZXJ0eX0gPSAke2VsZW1lbnRbcHJvcGVydHldfVxcbmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsYW50VU1MU3RyaW5nO1xufVxuIl19