@testgorilla/tgo-coding-test 0.0.1 → 1.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 (354) hide show
  1. package/README.md +49 -2
  2. package/esm2022/index.mjs +12 -0
  3. package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
  4. package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
  5. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
  6. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
  7. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
  8. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
  9. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
  10. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
  11. package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
  12. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
  13. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
  14. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
  15. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
  16. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
  17. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
  18. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
  19. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
  20. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
  21. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
  22. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
  23. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
  24. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
  25. package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
  26. package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
  27. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
  28. package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
  29. package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
  30. package/esm2022/lib/components/panel/panel.component.mjs +34 -0
  31. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
  32. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
  33. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
  34. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
  35. package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
  36. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
  37. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
  38. package/esm2022/lib/config/index.mjs +2 -0
  39. package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
  40. package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
  41. package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
  42. package/esm2022/lib/models/auto-saved-data.mjs +2 -0
  43. package/esm2022/lib/models/code-event.mjs +2 -0
  44. package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
  45. package/esm2022/lib/models/configs.mjs +2 -0
  46. package/esm2022/lib/models/language-change-action.mjs +2 -0
  47. package/esm2022/lib/models/lat-languages.mjs +3 -0
  48. package/esm2022/lib/models/mixpanel-events.mjs +2 -0
  49. package/esm2022/lib/models/mode.mjs +2 -0
  50. package/esm2022/lib/models/paste-data.mjs +2 -0
  51. package/esm2022/lib/models/programming-language.mjs +2 -0
  52. package/esm2022/lib/models/test-cases.mjs +7 -0
  53. package/esm2022/lib/models/theme.mjs +2 -0
  54. package/esm2022/lib/models/translations.mjs +2 -0
  55. package/esm2022/lib/models/view-mode.mjs +8 -0
  56. package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
  57. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
  58. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
  59. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
  60. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
  61. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
  62. package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
  63. package/esm2022/lib/services/configurations.service.mjs +89 -0
  64. package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
  65. package/esm2022/lib/services/storage.service.mjs +624 -0
  66. package/esm2022/lib/services/test-cases.service.mjs +30 -0
  67. package/esm2022/lib/services/theme.service.mjs +36 -0
  68. package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
  69. package/esm2022/lib/utils/resize-element.mjs +13 -0
  70. package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
  71. package/esm2022/shared/index.mjs +5 -0
  72. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
  73. package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
  74. package/esm2022/shared/lib/components/index.mjs +3 -0
  75. package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
  76. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
  77. package/esm2022/shared/lib/models/answer.mjs +2 -0
  78. package/esm2022/shared/lib/models/assessment.mjs +2 -0
  79. package/esm2022/shared/lib/models/environment.mjs +2 -0
  80. package/esm2022/shared/lib/models/index.mjs +9 -0
  81. package/esm2022/shared/lib/models/question-component.mjs +2 -0
  82. package/esm2022/shared/lib/models/question.mjs +2 -0
  83. package/esm2022/shared/lib/models/test.mjs +2 -0
  84. package/esm2022/shared/lib/models/translations.mjs +2 -0
  85. package/esm2022/shared/lib/models/window.mjs +2 -0
  86. package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
  87. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
  88. package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
  89. package/esm2022/shared/lib/services/index.mjs +10 -0
  90. package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
  91. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
  92. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
  93. package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
  94. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
  95. package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
  96. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
  97. package/esm2022/shared/test-mocks/index.mjs +3 -0
  98. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
  99. package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
  100. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  101. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  102. package/{src/index.ts → index.d.ts} +2 -19
  103. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  104. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  105. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  106. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  107. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  108. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  109. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  110. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  111. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  112. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  113. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  114. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  115. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  116. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  117. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  118. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  119. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  120. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  121. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  122. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  123. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  124. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  125. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  126. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  127. package/lib/components/configurations/configurations.component.d.ts +40 -0
  128. package/lib/components/instructions/instructions.component.d.ts +48 -0
  129. package/lib/components/panel/panel.component.d.ts +12 -0
  130. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  131. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  132. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  133. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  134. package/lib/components/tests/test-results.component.d.ts +33 -0
  135. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  136. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  137. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  138. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  139. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  140. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  141. package/lib/models/auto-saved-data.d.ts +42 -0
  142. package/lib/models/code-event.d.ts +15 -0
  143. package/lib/models/coderunner-execution-results.d.ts +51 -0
  144. package/lib/models/configs.d.ts +15 -0
  145. package/lib/models/language-change-action.d.ts +4 -0
  146. package/lib/models/lat-languages.d.ts +8 -0
  147. package/lib/models/mixpanel-events.d.ts +3 -0
  148. package/lib/models/mode.d.ts +5 -0
  149. package/lib/models/paste-data.d.ts +4 -0
  150. package/lib/models/programming-language.d.ts +8 -0
  151. package/lib/models/test-cases.d.ts +67 -0
  152. package/lib/models/theme.d.ts +4 -0
  153. package/lib/models/translations.d.ts +1 -0
  154. package/lib/models/view-mode.d.ts +6 -0
  155. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  156. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  157. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  158. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  159. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  160. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  161. package/lib/services/coding-test-config.service.d.ts +38 -0
  162. package/lib/services/configurations.service.d.ts +37 -0
  163. package/lib/services/lib-coding-test.service.d.ts +69 -0
  164. package/lib/services/storage.service.d.ts +83 -0
  165. package/lib/services/test-cases.service.d.ts +12 -0
  166. package/lib/services/theme.service.d.ts +17 -0
  167. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  168. package/lib/utils/resize-element.d.ts +2 -0
  169. package/lib/utils/time-to-ms.util.d.ts +1 -0
  170. package/package.json +18 -7
  171. package/shared/index.d.ts +4 -0
  172. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  173. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  174. package/shared/lib/components/index.d.ts +2 -0
  175. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  176. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  177. package/shared/lib/models/answer.d.ts +17 -0
  178. package/shared/lib/models/assessment.d.ts +80 -0
  179. package/shared/lib/models/environment.d.ts +1 -0
  180. package/shared/lib/models/index.d.ts +8 -0
  181. package/shared/lib/models/question-component.d.ts +54 -0
  182. package/shared/lib/models/question.d.ts +102 -0
  183. package/shared/lib/models/test.d.ts +81 -0
  184. package/shared/lib/models/translations.d.ts +1 -0
  185. package/shared/lib/models/window.d.ts +6 -0
  186. package/shared/lib/services/api/api.service.d.ts +25 -0
  187. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  188. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  189. package/shared/lib/services/index.d.ts +9 -0
  190. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  191. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  192. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  193. package/shared/lib/services/media/media.service.d.ts +29 -0
  194. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  195. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  196. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  197. package/shared/test-mocks/index.d.ts +2 -0
  198. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  199. package/.eslintrc.json +0 -45
  200. package/jest.config.ts +0 -21
  201. package/ng-package.json +0 -14
  202. package/project.json +0 -36
  203. package/src/lib/components/.gitkeep +0 -0
  204. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  205. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  206. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  207. package/src/lib/components/code-editor/code-editor.component.ts +0 -369
  208. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  209. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  210. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  211. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  212. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  213. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  214. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  215. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  216. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  217. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  218. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  219. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  220. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  221. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  222. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  223. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  224. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  225. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  226. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  227. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  228. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  229. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  230. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  231. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  232. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  233. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  234. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  235. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  236. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  237. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  238. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  239. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  240. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  241. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  242. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  243. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  244. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  245. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  246. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  247. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  248. package/src/lib/components/coding-question/coding-question.component.scss +0 -76
  249. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  250. package/src/lib/components/coding-question/coding-question.component.ts +0 -102
  251. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  252. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  253. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  254. package/src/lib/components/coding-section/coding-section.component.ts +0 -187
  255. package/src/lib/components/coding-test.module.ts +0 -124
  256. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  257. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  258. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  259. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
  260. package/src/lib/components/configurations/configurations.component.html +0 -57
  261. package/src/lib/components/configurations/configurations.component.scss +0 -42
  262. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  263. package/src/lib/components/configurations/configurations.component.ts +0 -98
  264. package/src/lib/components/instructions/instructions.component.html +0 -41
  265. package/src/lib/components/instructions/instructions.component.scss +0 -167
  266. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  267. package/src/lib/components/instructions/instructions.component.ts +0 -138
  268. package/src/lib/components/panel/panel.component.html +0 -19
  269. package/src/lib/components/panel/panel.component.scss +0 -41
  270. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  271. package/src/lib/components/panel/panel.component.ts +0 -34
  272. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  273. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  274. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  275. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
  276. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  277. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  278. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  279. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
  280. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  281. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  282. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  283. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
  284. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  285. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  286. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  287. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
  288. package/src/lib/components/tests/test-results.component.html +0 -119
  289. package/src/lib/components/tests/test-results.component.scss +0 -189
  290. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  291. package/src/lib/components/tests/test-results.component.ts +0 -98
  292. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  293. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  294. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  295. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
  296. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  297. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  298. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  299. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
  300. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  301. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  302. package/src/lib/models/.gitkeep +0 -0
  303. package/src/lib/models/auto-saved-data.ts +0 -51
  304. package/src/lib/models/code-event.ts +0 -17
  305. package/src/lib/models/coderunner-execution-results.ts +0 -58
  306. package/src/lib/models/coding-lib.mocks.ts +0 -246
  307. package/src/lib/models/configs.ts +0 -18
  308. package/src/lib/models/language-change-action.ts +0 -4
  309. package/src/lib/models/lat-languages.ts +0 -12
  310. package/src/lib/models/mixpanel-events.ts +0 -3
  311. package/src/lib/models/mode.ts +0 -5
  312. package/src/lib/models/paste-data.ts +0 -4
  313. package/src/lib/models/programming-language.ts +0 -9
  314. package/src/lib/models/test-cases.ts +0 -74
  315. package/src/lib/models/theme.ts +0 -5
  316. package/src/lib/models/translations.ts +0 -1
  317. package/src/lib/models/view-mode.ts +0 -6
  318. package/src/lib/services/.gitkeep +0 -0
  319. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  320. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  321. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  322. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  323. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  324. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  325. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  326. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  327. package/src/lib/services/coding-test-config.service.ts +0 -48
  328. package/src/lib/services/configurations.service.mocks.ts +0 -77
  329. package/src/lib/services/configurations.service.spec.ts +0 -79
  330. package/src/lib/services/configurations.service.ts +0 -111
  331. package/src/lib/services/index.ts +0 -0
  332. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  333. package/src/lib/services/lib-coding-test.service.ts +0 -157
  334. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  335. package/src/lib/services/storage.service.spec.ts +0 -1120
  336. package/src/lib/services/storage.service.ts +0 -729
  337. package/src/lib/services/test-cases.service.spec.ts +0 -53
  338. package/src/lib/services/test-cases.service.ts +0 -29
  339. package/src/lib/services/theme.service.spec.ts +0 -76
  340. package/src/lib/services/theme.service.ts +0 -34
  341. package/src/lib/styles/mixins.scss +0 -86
  342. package/src/lib/styles/styles.scss +0 -112
  343. package/src/lib/styles/variables.scss +0 -105
  344. package/src/lib/utils/.gitkeep +0 -0
  345. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  346. package/src/lib/utils/resize-element.ts +0 -15
  347. package/src/lib/utils/time-to-ms.util.ts +0 -10
  348. package/src/test-setup.ts +0 -1
  349. package/tsconfig.json +0 -16
  350. package/tsconfig.lib.json +0 -12
  351. package/tsconfig.lib.prod.json +0 -9
  352. package/tsconfig.spec.json +0 -13
  353. /package/{src/assets → assets}/i18n/en.json +0 -0
  354. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
package/README.md CHANGED
@@ -113,6 +113,54 @@ import { TgoCodingTestCandidateViewComponent } from '@testgorilla/tgo-coding-tes
113
113
  export class MyComponent {}
114
114
  ```
115
115
 
116
+ ## Assets (translations)
117
+
118
+ This package ships its translations under `assets/i18n`. Consumer apps must copy these assets into their build output so Transloco can load them at runtime.
119
+
120
+ - **Angular CLI / Nx**: add an `assets` entry pointing at the package:
121
+
122
+ ```json
123
+ {
124
+ "assets": [
125
+ "src/favicon.ico",
126
+ "src/assets",
127
+ {
128
+ "glob": "**/*",
129
+ "input": "node_modules/@testgorilla/tgo-coding-test/assets",
130
+ "output": "assets/tgo-coding-test"
131
+ }
132
+ ]
133
+ }
134
+ ```
135
+
136
+ If you develop inside this repo (consuming the workspace sources), also include the local path:
137
+
138
+ ```json
139
+ {
140
+ "glob": "**/*",
141
+ "input": "packages/tgo-coding-test/src/assets",
142
+ "output": "assets/tgo-coding-test"
143
+ }
144
+ ```
145
+
146
+ After adding the asset entries, rebuild/re-serve your app so `/assets/tgo-coding-test/i18n/en.json` is available.
147
+
148
+ ## Mocking ApiService for demo/local runs
149
+
150
+ The candidate view includes a mocked API service for demos. To use it:
151
+
152
+ 1. In `tgo-coding-test-candidate-view.component.ts`, uncomment the mock provider and comment the real one:
153
+
154
+ ```typescript
155
+ // use MockedApiService for local demo only
156
+ { provide: ApiService, useClass: MockedApiService },
157
+ // ApiService,
158
+ ```
159
+
160
+ 2. Ensure `MockedApiService` is imported at the top of the file.
161
+
162
+ This lets the component run without live backend calls when serving the demo app.
163
+
116
164
  ## API
117
165
 
118
166
  ### TgoCodingTestComponent
@@ -196,7 +244,6 @@ This library requires the following peer dependencies:
196
244
  - `@angular/router` ^18.2.13
197
245
  - `@ngneat/transloco` ~4.3.0
198
246
  - `@ngneat/until-destroy` 10.0.0
199
- - `@testgorilla/tgo-test-shared` ^0.0.1
200
247
  - `@testgorilla/tgo-ui` ^3.0.0
201
248
  - `angular-split` ^18.0.0
202
249
  - `monaco-editor` 0.50.0
@@ -218,7 +265,7 @@ All required services, models, and components are included within this library:
218
265
  - `CoderunnerApiService` - API service for code execution
219
266
  - `CodingTestConfigService` - Provides access to library configuration (injects configuration token internally)
220
267
  - `ThemeService` - Provides theme/company color configuration
221
- - `Question`, `TestResultRead`, `Assessment`, `ISubmissionState` - Type definitions from `@testgorilla/tgo-test-shared`
268
+ - `Question`, `TestResultRead`, `Assessment`, `ISubmissionState` - Type definitions (bundled from shared code)
222
269
  - `CodeEditorComponent`, `CodingQuestionComponent`, `RunnableEditorComponent` - UI components
223
270
  - `TranslocoLazyModuleUtils`, `getAvailableLangs` - Translation utilities
224
271
 
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Public API Surface of coding-test
3
+ */
4
+ export { TgoCodingTestComponent } from './lib/components/tgo-coding-test/tgo-coding-test.component';
5
+ export { TgoCodingTestCandidateViewComponent } from './lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component';
6
+ export { ViewMode } from './lib/models/view-mode';
7
+ export { LibCodingTestService } from './lib/services/lib-coding-test.service';
8
+ export { StorageCodingService } from './lib/services/storage.service';
9
+ export { CodingTestConfigService } from './lib/services/coding-test-config.service';
10
+ // Configuration exports
11
+ export { provideTgoCodingTest, } from './lib/config';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDcEcsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMEZBQTBGLENBQUM7QUFZL0ksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSWxELE9BQU8sRUFBRSxvQkFBb0IsRUFBbUIsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVwRix3QkFBd0I7QUFDeEIsT0FBTyxFQUVMLG9CQUFvQixHQUNyQixNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY29kaW5nLXRlc3RcbiAqL1xuXG5leHBvcnQgeyBUZ29Db2RpbmdUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy90Z28tY29kaW5nLXRlc3QvdGdvLWNvZGluZy10ZXN0LmNvbXBvbmVudCc7XG5leHBvcnQgeyBUZ29Db2RpbmdUZXN0Q2FuZGlkYXRlVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3L3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy5jb21wb25lbnQnO1xuLy8gTm90ZTogQ29kaW5nVGVzdE1vZHVsZSBpcyBrZXB0IGludGVybmFsIGZvciBub3cgYW5kIG5vdCBleHBvc2VkIGluIHRoZSBwdWJsaWMgQVBJXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvZGluZy10ZXN0Lm1vZHVsZSc7XG5leHBvcnQgeyBDb25maWcgYXMgTGliQ29kaW5nQ29uZmlnIH0gZnJvbSAnLi9saWIvbW9kZWxzL2NvbmZpZ3MnO1xuZXhwb3J0IHtcbiAgQ3VzdG9tVGVzdENhc2UsXG4gIEV4YW1wbGVUZXN0Q2FzZSxcbiAgVGVzdENhc2VSZXN1bHQsXG4gIFRlc3RDYXNlRGVsZXRpb25BY3Rpb24sXG4gIFRlc3RDYXNlRGVsZXRpb25EYXRhLFxufSBmcm9tICcuL2xpYi9tb2RlbHMvdGVzdC1jYXNlcyc7XG5leHBvcnQgeyBUaGVtZXMgfSBmcm9tICcuL2xpYi9tb2RlbHMvdGhlbWUnO1xuZXhwb3J0IHsgVmlld01vZGUgfSBmcm9tICcuL2xpYi9tb2RlbHMvdmlldy1tb2RlJztcbmV4cG9ydCB7IExBVExhbmd1YWdlLCBMQVRMYW5ndWFnZXMgfSBmcm9tICcuL2xpYi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5leHBvcnQgeyBDb2RlRWRpdG9yTGFuZ3VhZ2VzIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5leHBvcnQgeyBNb2RlcyB9IGZyb20gJy4vbGliL21vZGVscy9tb2RlJztcbmV4cG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlLCBSZXNldENvZGVBY3Rpb24gfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9saWItY29kaW5nLXRlc3Quc2VydmljZSc7XG5leHBvcnQgeyBTdG9yYWdlQ29kaW5nU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgeyBDb2RpbmdUZXN0Q29uZmlnU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2NvZGluZy10ZXN0LWNvbmZpZy5zZXJ2aWNlJztcblxuLy8gQ29uZmlndXJhdGlvbiBleHBvcnRzXG5leHBvcnQge1xuICBUZ29Db2RpbmdUZXN0Q29uZmlnLFxuICBwcm92aWRlVGdvQ29kaW5nVGVzdCxcbn0gZnJvbSAnLi9saWIvY29uZmlnJztcbiJdfQ==
@@ -0,0 +1,335 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
6
+ import { combineLatest, distinctUntilChanged, filter, first, interval, map, take } from 'rxjs';
7
+ import { MonacoEditorModule } from 'ngx-monaco-editor-v2';
8
+ import { erlangLanguage } from '../../utils/additional-languages/erlang';
9
+ import { ConfigurationsService } from '../../services/configurations.service';
10
+ import { LibCodingTestService } from '../../services/lib-coding-test.service';
11
+ import { StorageCodingService } from '../../services/storage.service';
12
+ import { CodeEditorService } from './code-editor.service';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/forms";
15
+ import * as i2 from "ngx-monaco-editor-v2";
16
+ let CodeEditorComponent = class CodeEditorComponent {
17
+ libCodingTestService = inject(LibCodingTestService);
18
+ configurationsService = inject(ConfigurationsService);
19
+ codeEditorService = inject(CodeEditorService);
20
+ changeDetectorRef = inject(ChangeDetectorRef);
21
+ StorageCodingService = inject(StorageCodingService);
22
+ initCode;
23
+ functionParams;
24
+ functionName;
25
+ returnType;
26
+ hasCodingConfigPanel;
27
+ isReadonly;
28
+ autoHeight;
29
+ shouldGenerateInitCode;
30
+ set snapshot(snap) {
31
+ if (snap) {
32
+ this.currentSnapshot = snap;
33
+ this.handleSnapshot(snap.text);
34
+ }
35
+ }
36
+ pasteEvent = new EventEmitter();
37
+ codeChange = new EventEmitter();
38
+ codeEditorElRef;
39
+ code = '';
40
+ codePublished = '';
41
+ codeLanguage = '';
42
+ editorOptions = {
43
+ theme: "vs-dark" /* MonacoColorTheme.Dark */,
44
+ fontSize: '14',
45
+ scrollBeyondLastLine: false,
46
+ minimap: { enabled: false },
47
+ fixedOverflowWidgets: true,
48
+ insertSpaces: false,
49
+ detectIndentation: false,
50
+ automaticLayout: true,
51
+ };
52
+ editor;
53
+ previousConfig = this.StorageCodingService.getSavedConfig();
54
+ currentSnapshot;
55
+ previousMonacoDecoration;
56
+ pasteListener;
57
+ contentChangedSub;
58
+ ngOnInit() {
59
+ if (!this.previousConfig) {
60
+ this.previousConfig = this.configurationsService.getInitialConfig();
61
+ }
62
+ if (this.hasCodingConfigPanel) {
63
+ this.updateIDEConfig();
64
+ }
65
+ this.listenUpdates();
66
+ this.setupConfigs();
67
+ this.setupCode();
68
+ }
69
+ ngOnChanges(changes) {
70
+ if (typeof changes.initCode?.currentValue === 'string') {
71
+ this.code = changes.initCode.currentValue;
72
+ }
73
+ }
74
+ ngOnDestroy() {
75
+ this.contentChangedSub?.dispose();
76
+ this.pasteListener?.dispose();
77
+ }
78
+ initEditor(editor) {
79
+ this.editor = editor;
80
+ this.pasteListener = this.editor.onDidPaste(event => this.catchEvent(event));
81
+ if (this.currentSnapshot) {
82
+ this.handleSnapshot(this.currentSnapshot.text);
83
+ }
84
+ if (this.autoHeight) {
85
+ this.listenContentHeight(editor);
86
+ }
87
+ }
88
+ catchEvent(event) {
89
+ const data = this.editor.getModel()?.getValueInRange(event.range);
90
+ if (data) {
91
+ this.pasteEvent.emit({ type: 'paste', data });
92
+ }
93
+ }
94
+ publishCode(code) {
95
+ if (code !== this.codePublished) {
96
+ this.codePublished = code;
97
+ this.codeChange.emit(this.codePublished);
98
+ }
99
+ }
100
+ updateIDEConfig() {
101
+ this.configurationsService.config$
102
+ .pipe(distinctUntilChanged(), untilDestroyed(this))
103
+ .subscribe((config) => {
104
+ let configObject = {};
105
+ // eslint-disable-next-line guard-for-in
106
+ for (const key in config) {
107
+ if (config[key] !== this.previousConfig[key]) {
108
+ switch (key) {
109
+ case "Color theme" /* FormattingOptions.ColorTheme */:
110
+ configObject = {
111
+ theme: config["Color theme" /* FormattingOptions.ColorTheme */] === "theme-default" /* Themes.Default */
112
+ ? "vs" /* MonacoColorTheme.Light */
113
+ : "vs-dark" /* MonacoColorTheme.Dark */,
114
+ };
115
+ break;
116
+ case "Auto-complete" /* CodingAssistanceOptions.AutoComplete */:
117
+ configObject = {
118
+ quickSuggestions: {
119
+ other: config["Auto-complete" /* CodingAssistanceOptions.AutoComplete */],
120
+ },
121
+ };
122
+ break;
123
+ case "Auto-brackets" /* CodingAssistanceOptions.AutoBrackets */:
124
+ configObject = {
125
+ autoClosingBrackets: config["Auto-brackets" /* CodingAssistanceOptions.AutoBrackets */] ? 'always' : 'never',
126
+ };
127
+ break;
128
+ case "Tab size" /* FormattingOptions.TabSize */:
129
+ configObject = {
130
+ tabSize: config["Tab size" /* FormattingOptions.TabSize */],
131
+ };
132
+ break;
133
+ case "Font size" /* FormattingOptions.FontSize */:
134
+ configObject = {
135
+ fontSize: config["Font size" /* FormattingOptions.FontSize */],
136
+ };
137
+ break;
138
+ case "Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */:
139
+ this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {
140
+ if (language === "javascript" /* CodeEditorLanguages.Javascript */) {
141
+ window['monaco'].languages.typescript.javascriptDefaults.setDiagnosticsOptions({
142
+ noSemanticValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
143
+ noSyntaxValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
144
+ });
145
+ }
146
+ else if (language === "typescript" /* CodeEditorLanguages.Typescript */) {
147
+ window['monaco'].languages.typescript.typescriptDefaults.setDiagnosticsOptions({
148
+ noSemanticValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
149
+ noSyntaxValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
150
+ });
151
+ }
152
+ });
153
+ break;
154
+ }
155
+ this.editorOptions = Object.assign({}, this.editorOptions, configObject);
156
+ }
157
+ }
158
+ this.changeDetectorRef.detectChanges();
159
+ this.previousConfig = config;
160
+ });
161
+ this.editorOptions = Object.assign({}, this.editorOptions, {
162
+ automaticLayout: true,
163
+ });
164
+ }
165
+ listenContentHeight(editor) {
166
+ const updateHeight = () => {
167
+ window.requestAnimationFrame(() => {
168
+ const { width } = this.codeEditorElRef.nativeElement.getBoundingClientRect();
169
+ const contentHeight = Math.min(1000, editor.getContentHeight());
170
+ this.codeEditorElRef.nativeElement.style.height = `${contentHeight}px`;
171
+ editor.layout({ width, height: contentHeight });
172
+ });
173
+ };
174
+ this.contentChangedSub = editor.onDidContentSizeChange(updateHeight);
175
+ updateHeight();
176
+ }
177
+ setupConfigs() {
178
+ const { functionParams: params, functionName: name, returnType } = this;
179
+ const config = this.previousConfig;
180
+ const wordWrap = this.currentSnapshot ? 'on' : 'off';
181
+ const theme = this.getInitialColorTheme(config, this.currentSnapshot);
182
+ this.libCodingTestService.currentLanguage$.pipe(untilDestroyed(this)).subscribe((language) => {
183
+ if (this.shouldGenerateInitCode) {
184
+ this.codeEditorService.setHelper(language, { params, name, returnType });
185
+ this.codeLanguage = this.codeEditorService.getEditorLang();
186
+ }
187
+ else {
188
+ if (language === "c++" /* CodeEditorLanguages.Cpp */) {
189
+ this.codeLanguage = "cpp" /* CodeEditorLanguages.CppEditor */;
190
+ }
191
+ else if (language === "c#" /* CodeEditorLanguages.CSharp */ || language === "c#_legacy" /* CodeEditorLanguages.CSharpLegacy */) {
192
+ this.codeLanguage = "csharp" /* CodeEditorLanguages.CSharpEditor */;
193
+ }
194
+ else if (language === "sqlite3" /* CodeEditorLanguages.Sqlite */) {
195
+ this.codeLanguage = "sql" /* CodeEditorLanguages.Sql */;
196
+ }
197
+ else {
198
+ this.codeLanguage = language;
199
+ }
200
+ }
201
+ this.editorOptions = Object.assign({}, this.editorOptions, {
202
+ language: this.codeLanguage,
203
+ });
204
+ });
205
+ this.editorOptions = Object.assign({}, this.editorOptions, {
206
+ readOnly: this.isReadonly,
207
+ quickSuggestions: {
208
+ other: config["Auto-complete" /* CodingAssistanceOptions.AutoComplete */],
209
+ },
210
+ autoClosingBrackets: config["Auto-brackets" /* CodingAssistanceOptions.AutoBrackets */] ? 'always' : 'never',
211
+ tabSize: config["Tab size" /* FormattingOptions.TabSize */],
212
+ fontSize: config["Font size" /* FormattingOptions.FontSize */],
213
+ theme,
214
+ wordWrap,
215
+ });
216
+ const monacoLibraryReady$ = interval(100).pipe(map(() => window.monaco), filter(Boolean), first());
217
+ combineLatest({
218
+ monaco: monacoLibraryReady$,
219
+ language: this.libCodingTestService.currentLanguage$,
220
+ })
221
+ .pipe(take(1))
222
+ .subscribe(result => {
223
+ if (result.language === "javascript" /* CodeEditorLanguages.Javascript */) {
224
+ result.monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
225
+ noSemanticValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
226
+ noSyntaxValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
227
+ });
228
+ }
229
+ else if (result.language === "typescript" /* CodeEditorLanguages.Typescript */) {
230
+ result.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
231
+ noSemanticValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
232
+ noSyntaxValidation: !config["Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */],
233
+ });
234
+ }
235
+ result.monaco.languages.register({ id: "erlang" /* CodeEditorLanguages.Erlang */ });
236
+ result.monaco.languages.setMonarchTokensProvider("erlang" /* CodeEditorLanguages.Erlang */, erlangLanguage);
237
+ });
238
+ }
239
+ getInitialColorTheme(config, snapshot) {
240
+ let theme;
241
+ if (snapshot) {
242
+ theme = "vs-dark" /* MonacoColorTheme.Dark */;
243
+ }
244
+ else {
245
+ theme = config["Color theme" /* FormattingOptions.ColorTheme */] === "theme-default" /* Themes.Default */ ? "vs" /* MonacoColorTheme.Light */ : "vs-dark" /* MonacoColorTheme.Dark */;
246
+ }
247
+ return theme;
248
+ }
249
+ setupCode(calledFromReset = false) {
250
+ this.handleInitCode(calledFromReset);
251
+ this.publishCode(this.code);
252
+ }
253
+ handleInitCode(calledFromReset = false) {
254
+ if (calledFromReset) {
255
+ this.code = this.libCodingTestService.getInitCode();
256
+ }
257
+ else if (this.initCode) {
258
+ this.code = this.initCode;
259
+ }
260
+ else if (this.currentSnapshot) {
261
+ return;
262
+ }
263
+ else if (this.shouldGenerateInitCode) {
264
+ this.code = this.codeEditorService.getInitCode();
265
+ }
266
+ }
267
+ listenUpdates() {
268
+ this.libCodingTestService.codeReset$
269
+ .pipe(filter(val => val === "confirm" /* ResetCodeAction.Confirm */), untilDestroyed(this))
270
+ .subscribe(() => {
271
+ this.setupCode(true);
272
+ });
273
+ }
274
+ handleSnapshot(code) {
275
+ this.code = code;
276
+ if (!this.editor) {
277
+ return;
278
+ }
279
+ this.editor.setValue(code); // make sure editor model has the latest value of the code
280
+ if (this.previousMonacoDecoration) {
281
+ this.previousMonacoDecoration.clear();
282
+ }
283
+ if (this.currentSnapshot.copied_text) {
284
+ // if the snapshot contains copyPasted code, find it's range in monaco
285
+ const matches = this.editor
286
+ .getModel()
287
+ .findMatches(this.currentSnapshot.copied_text, false, false, true, null, true);
288
+ if (matches.length) {
289
+ // if the range is found in editor model, decorate it with additional class to highlight on the ui
290
+ this.previousMonacoDecoration = this.editor.createDecorationsCollection([
291
+ {
292
+ range: matches[0].range,
293
+ options: { inlineClassName: 'copy-pasted-code' },
294
+ },
295
+ ]);
296
+ }
297
+ }
298
+ }
299
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
300
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CodeEditorComponent, isStandalone: true, selector: "tgo-code-editor", inputs: { initCode: "initCode", functionParams: "functionParams", functionName: "functionName", returnType: "returnType", hasCodingConfigPanel: "hasCodingConfigPanel", isReadonly: "isReadonly", autoHeight: "autoHeight", shouldGenerateInitCode: "shouldGenerateInitCode", snapshot: "snapshot" }, outputs: { pasteEvent: "pasteEvent", codeChange: "codeChange" }, viewQueries: [{ propertyName: "codeEditorElRef", first: true, predicate: ["editor"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container notranslate\" translate=\"no\">\n <ngx-monaco-editor\n #editor\n class=\"editor\"\n [options]=\"editorOptions\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"publishCode($event)\"\n (onInit)=\"initEditor($event)\"\n ></ngx-monaco-editor>\n</div>\n", styles: [":host{display:block;height:100%;max-width:100%;max-height:100%}.container{height:100%;background-color:var(--code-editor-background)}.editor{height:100%}.editor ::ng-deep .copy-pasted-code{background-color:#ff0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MonacoEditorModule }, { kind: "component", type: i2.EditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "model"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
301
+ };
302
+ CodeEditorComponent = __decorate([
303
+ UntilDestroy()
304
+ ], CodeEditorComponent);
305
+ export { CodeEditorComponent };
306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeEditorComponent, decorators: [{
307
+ type: Component,
308
+ args: [{ standalone: true, selector: 'tgo-code-editor', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, MonacoEditorModule], template: "<div class=\"container notranslate\" translate=\"no\">\n <ngx-monaco-editor\n #editor\n class=\"editor\"\n [options]=\"editorOptions\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"publishCode($event)\"\n (onInit)=\"initEditor($event)\"\n ></ngx-monaco-editor>\n</div>\n", styles: [":host{display:block;height:100%;max-width:100%;max-height:100%}.container{height:100%;background-color:var(--code-editor-background)}.editor{height:100%}.editor ::ng-deep .copy-pasted-code{background-color:#ff0}\n"] }]
309
+ }], propDecorators: { initCode: [{
310
+ type: Input
311
+ }], functionParams: [{
312
+ type: Input
313
+ }], functionName: [{
314
+ type: Input
315
+ }], returnType: [{
316
+ type: Input
317
+ }], hasCodingConfigPanel: [{
318
+ type: Input
319
+ }], isReadonly: [{
320
+ type: Input
321
+ }], autoHeight: [{
322
+ type: Input
323
+ }], shouldGenerateInitCode: [{
324
+ type: Input
325
+ }], snapshot: [{
326
+ type: Input
327
+ }], pasteEvent: [{
328
+ type: Output
329
+ }], codeChange: [{
330
+ type: Output
331
+ }], codeEditorElRef: [{
332
+ type: ViewChild,
333
+ args: ['editor', { read: ElementRef }]
334
+ }] } });
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLHdDQUF3QyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFD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QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQzs4QkFTL0MsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFTyxRQUFRO3NCQUFwQixLQUFLO2dCQU9JLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFb0MsZUFBZTtzQkFBekQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBlZGl0b3IsIElEaXNwb3NhYmxlIH0gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgaW50ZXJ2YWwsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTW9uYWNvRWRpdG9yTW9kdWxlIH0gZnJvbSAnbmd4LW1vbmFjby1lZGl0b3ItdjInO1xuXG5pbXBvcnQgeyBlcmxhbmdMYW5ndWFnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZGl0aW9uYWwtbGFuZ3VhZ2VzL2VybGFuZyc7XG5pbXBvcnQgeyBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucywgQ29uZmlnLCBGb3JtYXR0aW5nT3B0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9jb25maWdzJztcbmltcG9ydCB7IFRoZW1lcyB9IGZyb20gJy4uLy4uL21vZGVscy90aGVtZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlLCBSZXNldENvZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saWItY29kaW5nLXRlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlQ29kaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yU2VydmljZSB9IGZyb20gJy4vY29kZS1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRnVuY1BhcmFtLCBDb2RlRWRpdG9yTGFuZ3VhZ2VzLCBDb2RlRWRpdG9yVHlwZXNNYXAgfSBmcm9tICcuL2hlbHBlcnMvY29kZS1lZGl0b3ItaGVscGVyLm1vZGVsJztcbmltcG9ydCB7IE1vbmFjb0NvbG9yVGhlbWUsIFBhc3RlRGF0YSB9IGZyb20gJy4vbW9kZWxzL2NvZGUtZWRpdG9yLm1vZGVsJztcbmltcG9ydCB7IENvZGluZ1NuYXBzaG90IH0gZnJvbSAnLi9tb2RlbHMvY29kaW5nLXNuYXBzaG90Lm1vZGVsJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd0Z28tY29kZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2RlLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1vbmFjb0VkaXRvck1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KENvbmZpZ3VyYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZUVkaXRvclNlcnZpY2UgPSBpbmplY3QoQ29kZUVkaXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBTdG9yYWdlQ29kaW5nU2VydmljZSA9IGluamVjdChTdG9yYWdlQ29kaW5nU2VydmljZSk7XG5cbiAgQElucHV0KCkgaW5pdENvZGU6IHN0cmluZztcbiAgQElucHV0KCkgZnVuY3Rpb25QYXJhbXM6IENvZGVFZGl0b3JGdW5jUGFyYW1bXTtcbiAgQElucHV0KCkgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJldHVyblR5cGU6IGtleW9mIENvZGVFZGl0b3JUeXBlc01hcDtcbiAgQElucHV0KCkgaGFzQ29kaW5nQ29uZmlnUGFuZWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzUmVhZG9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGF1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3VsZEdlbmVyYXRlSW5pdENvZGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgc2V0IHNuYXBzaG90KHNuYXA6IENvZGluZ1NuYXBzaG90KSB7XG4gICAgaWYgKHNuYXApIHtcbiAgICAgIHRoaXMuY3VycmVudFNuYXBzaG90ID0gc25hcDtcbiAgICAgIHRoaXMuaGFuZGxlU25hcHNob3Qoc25hcC50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgcGFzdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFzdGVEYXRhPigpO1xuICBAT3V0cHV0KCkgY29kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb2RlRWRpdG9yRWxSZWY6IEVsZW1lbnRSZWY7XG5cbiAgY29kZSA9ICcnO1xuICBjb2RlUHVibGlzaGVkID0gJyc7XG4gIGNvZGVMYW5ndWFnZSA9ICcnO1xuICBlZGl0b3JPcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgIHRoZW1lOiBNb25hY29Db2xvclRoZW1lLkRhcmssXG4gICAgZm9udFNpemU6ICcxNCcsXG4gICAgc2Nyb2xsQmV5b25kTGFzdExpbmU6IGZhbHNlLFxuICAgIG1pbmltYXA6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICBmaXhlZE92ZXJmbG93V2lkZ2V0czogdHJ1ZSxcbiAgICBpbnNlcnRTcGFjZXM6IGZhbHNlLFxuICAgIGRldGVjdEluZGVudGF0aW9uOiBmYWxzZSxcbiAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsXG4gIH07XG5cbiAgZWRpdG9yOiBlZGl0b3IuSUNvZGVFZGl0b3I7XG4gIHByZXZpb3VzQ29uZmlnID0gdGhpcy5TdG9yYWdlQ29kaW5nU2VydmljZS5nZXRTYXZlZENvbmZpZygpO1xuXG4gIGN1cnJlbnRTbmFwc2hvdDogQ29kaW5nU25hcHNob3Q7XG4gIHByZXZpb3VzTW9uYWNvRGVjb3JhdGlvbjogZWRpdG9yLklFZGl0b3JEZWNvcmF0aW9uc0NvbGxlY3Rpb247XG5cbiAgcHJpdmF0ZSBwYXN0ZUxpc3RlbmVyOiBJRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBjb250ZW50Q2hhbmdlZFN1YjogSURpc3Bvc2FibGU7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpb3VzQ29uZmlnKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2UuZ2V0SW5pdGlhbENvbmZpZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NvZGluZ0NvbmZpZ1BhbmVsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlERUNvbmZpZygpO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlblVwZGF0ZXMoKTtcblxuICAgIHRoaXMuc2V0dXBDb25maWdzKCk7XG4gICAgdGhpcy5zZXR1cENvZGUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNoYW5nZXMuaW5pdENvZGU/LmN1cnJlbnRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY29kZSA9IGNoYW5nZXMuaW5pdENvZGUuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudENoYW5nZWRTdWI/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLnBhc3RlTGlzdGVuZXI/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGluaXRFZGl0b3IoZWRpdG9yOiBlZGl0b3IuSUNvZGVFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcblxuICAgIHRoaXMucGFzdGVMaXN0ZW5lciA9IHRoaXMuZWRpdG9yLm9uRGlkUGFzdGUoZXZlbnQgPT4gdGhpcy5jYXRjaEV2ZW50KGV2ZW50KSk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50U25hcHNob3QpIHtcbiAgICAgIHRoaXMuaGFuZGxlU25hcHNob3QodGhpcy5jdXJyZW50U25hcHNob3QudGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXV0b0hlaWdodCkge1xuICAgICAgdGhpcy5saXN0ZW5Db250ZW50SGVpZ2h0KGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXRjaEV2ZW50KGV2ZW50OiBlZGl0b3IuSVBhc3RlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5lZGl0b3IuZ2V0TW9kZWwoKT8uZ2V0VmFsdWVJblJhbmdlKGV2ZW50LnJhbmdlKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5wYXN0ZUV2ZW50LmVtaXQoeyB0eXBlOiAncGFzdGUnLCBkYXRhIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1Ymxpc2hDb2RlKGNvZGUpOiB2b2lkIHtcbiAgICBpZiAoY29kZSAhPT0gdGhpcy5jb2RlUHVibGlzaGVkKSB7XG4gICAgICB0aGlzLmNvZGVQdWJsaXNoZWQgPSBjb2RlO1xuICAgICAgdGhpcy5jb2RlQ2hhbmdlLmVtaXQodGhpcy5jb2RlUHVibGlzaGVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlERUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5jb25maWckXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZzogQ29uZmlnKSA9PiB7XG4gICAgICAgIGxldCBjb25maWdPYmplY3QgPSB7fTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25maWcpIHtcbiAgICAgICAgICBpZiAoY29uZmlnW2tleV0gIT09IHRoaXMucHJldmlvdXNDb25maWdba2V5XSkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkgYXMgRm9ybWF0dGluZ09wdGlvbnMgfCBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucykge1xuICAgICAgICAgICAgICBjYXNlIEZvcm1hdHRpbmdPcHRpb25zLkNvbG9yVGhlbWU6XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgdGhlbWU6XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tGb3JtYXR0aW5nT3B0aW9ucy5Db2xvclRoZW1lXSA9PT0gVGhlbWVzLkRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICA/IE1vbmFjb0NvbG9yVGhlbWUuTGlnaHRcbiAgICAgICAgICAgICAgICAgICAgICA6IE1vbmFjb0NvbG9yVGhlbWUuRGFyayxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMuQXV0b0NvbXBsZXRlOlxuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgIHF1aWNrU3VnZ2VzdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXI6IGNvbmZpZ1tDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5BdXRvQ29tcGxldGVdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMuQXV0b0JyYWNrZXRzOlxuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgIGF1dG9DbG9zaW5nQnJhY2tldHM6IGNvbmZpZ1tDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5BdXRvQnJhY2tldHNdID8gJ2Fsd2F5cycgOiAnbmV2ZXInLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGb3JtYXR0aW5nT3B0aW9ucy5UYWJTaXplOlxuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgIHRhYlNpemU6IGNvbmZpZ1tGb3JtYXR0aW5nT3B0aW9ucy5UYWJTaXplXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRm9ybWF0dGluZ09wdGlvbnMuRm9udFNpemU6XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGNvbmZpZ1tGb3JtYXR0aW5nT3B0aW9ucy5Gb250U2l6ZV0sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIENvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkVycm9ySGlnaGxpZ2h0aW5nOlxuICAgICAgICAgICAgICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShsYW5ndWFnZSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgPT09IENvZGVFZGl0b3JMYW5ndWFnZXMuSmF2YXNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ21vbmFjbyddLmxhbmd1YWdlcy50eXBlc2NyaXB0LmphdmFzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiAhY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkVycm9ySGlnaGxpZ2h0aW5nXSxcbiAgICAgICAgICAgICAgICAgICAgICBub1N5bnRheFZhbGlkYXRpb246ICFjb25maWdbQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMuRXJyb3JIaWdobGlnaHRpbmddLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFuZ3VhZ2UgPT09IENvZGVFZGl0b3JMYW5ndWFnZXMuVHlwZXNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ21vbmFjbyddLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiAhY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkVycm9ySGlnaGxpZ2h0aW5nXSxcbiAgICAgICAgICAgICAgICAgICAgICBub1N5bnRheFZhbGlkYXRpb246ICFjb25maWdbQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMuRXJyb3JIaWdobGlnaHRpbmddLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZWRpdG9yT3B0aW9ucywgY29uZmlnT2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNDb25maWcgPSBjb25maWc7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZWRpdG9yT3B0aW9ucywge1xuICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Db250ZW50SGVpZ2h0KGVkaXRvcjogZWRpdG9yLklDb2RlRWRpdG9yKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlSGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY29kZUVkaXRvckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBNYXRoLm1pbigxMDAwLCBlZGl0b3IuZ2V0Q29udGVudEhlaWdodCgpKTtcbiAgICAgICAgdGhpcy5jb2RlRWRpdG9yRWxSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50SGVpZ2h0fXB4YDtcbiAgICAgICAgZWRpdG9yLmxheW91dCh7IHdpZHRoLCBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5jb250ZW50Q2hhbmdlZFN1YiA9IGVkaXRvci5vbkRpZENvbnRlbnRTaXplQ2hhbmdlKHVwZGF0ZUhlaWdodCk7XG4gICAgdXBkYXRlSGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29uZmlncygpOiB2b2lkIHtcbiAgICBjb25zdCB7IGZ1bmN0aW9uUGFyYW1zOiBwYXJhbXMsIGZ1bmN0aW9uTmFtZTogbmFtZSwgcmV0dXJuVHlwZSB9ID0gdGhpcztcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMucHJldmlvdXNDb25maWc7XG5cbiAgICBjb25zdCB3b3JkV3JhcCA9IHRoaXMuY3VycmVudFNuYXBzaG90ID8gJ29uJyA6ICdvZmYnO1xuICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRJbml0aWFsQ29sb3JUaGVtZShjb25maWcsIHRoaXMuY3VycmVudFNuYXBzaG90KTtcblxuICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKGxhbmd1YWdlOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG91bGRHZW5lcmF0ZUluaXRDb2RlKSB7XG4gICAgICAgIHRoaXMuY29kZUVkaXRvclNlcnZpY2Uuc2V0SGVscGVyKGxhbmd1YWdlLCB7IHBhcmFtcywgbmFtZSwgcmV0dXJuVHlwZSB9KTtcbiAgICAgICAgdGhpcy5jb2RlTGFuZ3VhZ2UgPSB0aGlzLmNvZGVFZGl0b3JTZXJ2aWNlLmdldEVkaXRvckxhbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsYW5ndWFnZSA9PT0gQ29kZUVkaXRvckxhbmd1YWdlcy5DcHApIHtcbiAgICAgICAgICB0aGlzLmNvZGVMYW5ndWFnZSA9IENvZGVFZGl0b3JMYW5ndWFnZXMuQ3BwRWRpdG9yO1xuICAgICAgICB9IGVsc2UgaWYgKGxhbmd1YWdlID09PSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLkNTaGFycCB8fCBsYW5ndWFnZSA9PT0gQ29kZUVkaXRvckxhbmd1YWdlcy5DU2hhcnBMZWdhY3kpIHtcbiAgICAgICAgICB0aGlzLmNvZGVMYW5ndWFnZSA9IENvZGVFZGl0b3JMYW5ndWFnZXMuQ1NoYXJwRWRpdG9yO1xuICAgICAgICB9IGVsc2UgaWYgKGxhbmd1YWdlID09PSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLlNxbGl0ZSkge1xuICAgICAgICAgIHRoaXMuY29kZUxhbmd1YWdlID0gQ29kZUVkaXRvckxhbmd1YWdlcy5TcWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2RlTGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0b3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5lZGl0b3JPcHRpb25zLCB7XG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmNvZGVMYW5ndWFnZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lZGl0b3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5lZGl0b3JPcHRpb25zLCB7XG4gICAgICByZWFkT25seTogdGhpcy5pc1JlYWRvbmx5LFxuICAgICAgcXVpY2tTdWdnZXN0aW9uczoge1xuICAgICAgICBvdGhlcjogY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkF1dG9Db21wbGV0ZV0sXG4gICAgICB9LFxuICAgICAgYXV0b0Nsb3NpbmdCcmFja2V0czogY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkF1dG9CcmFja2V0c10gPyAnYWx3YXlzJyA6ICduZXZlcicsXG4gICAgICB0YWJTaXplOiBjb25maWdbRm9ybWF0dGluZ09wdGlvbnMuVGFiU2l6ZV0sXG4gICAgICBmb250U2l6ZTogY29uZmlnW0Zvcm1hdHRpbmdPcHRpb25zLkZvbnRTaXplXSxcbiAgICAgIHRoZW1lLFxuICAgICAgd29yZFdyYXAsXG4gICAgfSk7XG4gICAgY29uc3QgbW9uYWNvTGlicmFyeVJlYWR5JCA9IGludGVydmFsKDEwMCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiB3aW5kb3cubW9uYWNvKSxcbiAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgbW9uYWNvOiBtb25hY29MaWJyYXJ5UmVhZHkkLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJCxcbiAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5sYW5ndWFnZSA9PT0gQ29kZUVkaXRvckxhbmd1YWdlcy5KYXZhc2NyaXB0KSB7XG4gICAgICAgICAgcmVzdWx0Lm1vbmFjby5sYW5ndWFnZXMudHlwZXNjcmlwdC5qYXZhc2NyaXB0RGVmYXVsdHMuc2V0RGlhZ25vc3RpY3NPcHRpb25zKHtcbiAgICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiAhY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkVycm9ySGlnaGxpZ2h0aW5nXSxcbiAgICAgICAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogIWNvbmZpZ1tDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5FcnJvckhpZ2hsaWdodGluZ10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxhbmd1YWdlID09PSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLlR5cGVzY3JpcHQpIHtcbiAgICAgICAgICByZXN1bHQubW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgICAgICAgbm9TZW1hbnRpY1ZhbGlkYXRpb246ICFjb25maWdbQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMuRXJyb3JIaWdobGlnaHRpbmddLFxuICAgICAgICAgICAgbm9TeW50YXhWYWxpZGF0aW9uOiAhY29uZmlnW0NvZGluZ0Fzc2lzdGFuY2VPcHRpb25zLkVycm9ySGlnaGxpZ2h0aW5nXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQubW9uYWNvLmxhbmd1YWdlcy5yZWdpc3Rlcih7IGlkOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzLkVybGFuZyB9KTtcbiAgICAgICAgcmVzdWx0Lm1vbmFjby5sYW5ndWFnZXMuc2V0TW9uYXJjaFRva2Vuc1Byb3ZpZGVyKENvZGVFZGl0b3JMYW5ndWFnZXMuRXJsYW5nLCBlcmxhbmdMYW5ndWFnZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbENvbG9yVGhlbWUoY29uZmlnOiBDb25maWcsIHNuYXBzaG90OiBDb2RpbmdTbmFwc2hvdCk6IHN0cmluZyB7XG4gICAgbGV0IHRoZW1lOiBNb25hY29Db2xvclRoZW1lO1xuXG4gICAgaWYgKHNuYXBzaG90KSB7XG4gICAgICB0aGVtZSA9IE1vbmFjb0NvbG9yVGhlbWUuRGFyaztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhlbWUgPSBjb25maWdbRm9ybWF0dGluZ09wdGlvbnMuQ29sb3JUaGVtZV0gPT09IFRoZW1lcy5EZWZhdWx0ID8gTW9uYWNvQ29sb3JUaGVtZS5MaWdodCA6IE1vbmFjb0NvbG9yVGhlbWUuRGFyaztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhlbWU7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29kZShjYWxsZWRGcm9tUmVzZXQgPSBmYWxzZSkge1xuICAgIHRoaXMuaGFuZGxlSW5pdENvZGUoY2FsbGVkRnJvbVJlc2V0KTtcbiAgICB0aGlzLnB1Ymxpc2hDb2RlKHRoaXMuY29kZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUluaXRDb2RlKGNhbGxlZEZyb21SZXNldCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKGNhbGxlZEZyb21SZXNldCkge1xuICAgICAgdGhpcy5jb2RlID0gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5nZXRJbml0Q29kZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbml0Q29kZSkge1xuICAgICAgdGhpcy5jb2RlID0gdGhpcy5pbml0Q29kZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFNuYXBzaG90KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlSW5pdENvZGUpIHtcbiAgICAgIHRoaXMuY29kZSA9IHRoaXMuY29kZUVkaXRvclNlcnZpY2UuZ2V0SW5pdENvZGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblVwZGF0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jb2RlUmVzZXQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHZhbCA9PiB2YWwgPT09IFJlc2V0Q29kZUFjdGlvbi5Db25maXJtKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldHVwQ29kZSh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTbmFwc2hvdChjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuXG4gICAgaWYgKCF0aGlzLmVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdG9yLnNldFZhbHVlKGNvZGUpOyAvLyBtYWtlIHN1cmUgZWRpdG9yIG1vZGVsIGhhcyB0aGUgbGF0ZXN0IHZhbHVlIG9mIHRoZSBjb2RlXG5cbiAgICBpZiAodGhpcy5wcmV2aW91c01vbmFjb0RlY29yYXRpb24pIHtcbiAgICAgIHRoaXMucHJldmlvdXNNb25hY29EZWNvcmF0aW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudFNuYXBzaG90LmNvcGllZF90ZXh0KSB7XG4gICAgICAvLyBpZiB0aGUgc25hcHNob3QgY29udGFpbnMgY29weVBhc3RlZCBjb2RlLCBmaW5kIGl0J3MgcmFuZ2UgaW4gbW9uYWNvXG4gICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5lZGl0b3JcbiAgICAgICAgLmdldE1vZGVsKClcbiAgICAgICAgLmZpbmRNYXRjaGVzKHRoaXMuY3VycmVudFNuYXBzaG90LmNvcGllZF90ZXh0LCBmYWxzZSwgZmFsc2UsIHRydWUsIG51bGwsIHRydWUpO1xuXG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gaWYgdGhlIHJhbmdlIGlzIGZvdW5kIGluIGVkaXRvciBtb2RlbCwgZGVjb3JhdGUgaXQgd2l0aCBhZGRpdGlvbmFsIGNsYXNzIHRvIGhpZ2hsaWdodCBvbiB0aGUgdWlcbiAgICAgICAgdGhpcy5wcmV2aW91c01vbmFjb0RlY29yYXRpb24gPSB0aGlzLmVkaXRvci5jcmVhdGVEZWNvcmF0aW9uc0NvbGxlY3Rpb24oW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJhbmdlOiBtYXRjaGVzWzBdLnJhbmdlLFxuICAgICAgICAgICAgb3B0aW9uczogeyBpbmxpbmVDbGFzc05hbWU6ICdjb3B5LXBhc3RlZC1jb2RlJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciBub3RyYW5zbGF0ZVwiIHRyYW5zbGF0ZT1cIm5vXCI+XG4gIDxuZ3gtbW9uYWNvLWVkaXRvclxuICAgICNlZGl0b3JcbiAgICBjbGFzcz1cImVkaXRvclwiXG4gICAgW29wdGlvbnNdPVwiZWRpdG9yT3B0aW9uc1wiXG4gICAgWyhuZ01vZGVsKV09XCJjb2RlXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJwdWJsaXNoQ29kZSgkZXZlbnQpXCJcbiAgICAob25Jbml0KT1cImluaXRFZGl0b3IoJGV2ZW50KVwiXG4gID48L25neC1tb25hY28tZWRpdG9yPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,72 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { CodeEditorCHelper, CodeEditorCppHelper, CodeEditorCSharpHelper, CodeEditorGoHelper, CodeEditorJavaHelper, CodeEditorJavascriptHelper, CodeEditorKotlinHelper, CodeEditorPhpHelper, CodeEditorPythonHelper, CodeEditorRHelper, CodeEditorRubyHelper, CodeEditorScalaHelper, CodeEditorSqlHelper, CodeEditorSwiftHelper, CodeEditorTypescriptHelper, } from './helpers';
3
+ import * as i0 from "@angular/core";
4
+ export class CodeEditorService {
5
+ helper;
6
+ setHelper(language, funcParams) {
7
+ this.helper = this.createHelper(language, funcParams);
8
+ }
9
+ getInitCode() {
10
+ return this.helper.getInitCode();
11
+ }
12
+ getEditorLang() {
13
+ return this.helper.getEditorLang();
14
+ }
15
+ createHelper(lang, funcParams) {
16
+ // todo: review this logic according to new TAT, remove generated init code if not needed ?
17
+ switch (lang) {
18
+ case "javascript" /* CodeEditorLanguages.Javascript */:
19
+ return new CodeEditorJavascriptHelper(funcParams);
20
+ case "typescript" /* CodeEditorLanguages.Typescript */:
21
+ return new CodeEditorTypescriptHelper(funcParams);
22
+ case "php" /* CodeEditorLanguages.Php */:
23
+ return new CodeEditorPhpHelper(funcParams);
24
+ case "python" /* CodeEditorLanguages.Python */:
25
+ return new CodeEditorPythonHelper(funcParams);
26
+ case "java" /* CodeEditorLanguages.Java */:
27
+ return new CodeEditorJavaHelper(funcParams);
28
+ case "ruby" /* CodeEditorLanguages.Ruby */:
29
+ return new CodeEditorRubyHelper(funcParams);
30
+ case "c" /* CodeEditorLanguages.C */:
31
+ return new CodeEditorCHelper(funcParams);
32
+ case "c++" /* CodeEditorLanguages.Cpp */:
33
+ return new CodeEditorCppHelper(funcParams);
34
+ case "r" /* CodeEditorLanguages.R */:
35
+ return new CodeEditorRHelper(funcParams);
36
+ case "scala" /* CodeEditorLanguages.Scala */:
37
+ return new CodeEditorScalaHelper(funcParams);
38
+ case "c#" /* CodeEditorLanguages.CSharp */:
39
+ case "c#_legacy" /* CodeEditorLanguages.CSharpLegacy */:
40
+ return new CodeEditorCSharpHelper(funcParams);
41
+ case "go" /* CodeEditorLanguages.Go */:
42
+ return new CodeEditorGoHelper(funcParams);
43
+ case "sql" /* CodeEditorLanguages.Sql */:
44
+ case "sqlite3" /* CodeEditorLanguages.Sqlite */:
45
+ return new CodeEditorSqlHelper(funcParams);
46
+ default: {
47
+ const versionedHelper = lang && this.getVersionedHelper(lang, funcParams);
48
+ if (!versionedHelper) {
49
+ throw new Error(`language ${lang} is not supported`);
50
+ }
51
+ return versionedHelper;
52
+ }
53
+ }
54
+ }
55
+ getVersionedHelper(lang, funcParams) {
56
+ if (lang.startsWith("kotlin" /* CodeEditorLanguages.Kotlin */)) {
57
+ return new CodeEditorKotlinHelper(funcParams);
58
+ }
59
+ if (lang.startsWith("swift" /* CodeEditorLanguages.Swift */)) {
60
+ return new CodeEditorSwiftHelper(funcParams);
61
+ }
62
+ }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
64
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeEditorService, providedIn: 'root' });
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeEditorService, decorators: [{
67
+ type: Injectable,
68
+ args: [{
69
+ providedIn: 'root',
70
+ }]
71
+ }] });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvY29kZS1lZGl0b3IvY29kZS1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLDBCQUEwQixHQUMzQixNQUFNLFdBQVcsQ0FBQzs7QUFVbkIsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixNQUFNLENBQW1CO0lBRWpDLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFVBQWlDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFZLEVBQUUsVUFBaUM7UUFDbEUsMkZBQTJGO1FBQzNGLFFBQVEsSUFBMkIsRUFBRSxDQUFDO1lBQ3BDO2dCQUNFLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRDtnQkFDRSxPQUFPLElBQUksMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQ7Z0JBQ0UsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDO2dCQUNFLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRDtnQkFDRSxPQUFPLElBQUksb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUM7Z0JBQ0UsT0FBTyxJQUFJLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDO2dCQUNFLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQztnQkFDRSxPQUFPLElBQUksbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0M7Z0JBQ0UsT0FBTyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDO2dCQUNFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQywyQ0FBZ0M7WUFDaEM7Z0JBQ0UsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hEO2dCQUNFLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1Qyx5Q0FBNkI7WUFDN0I7Z0JBQ0UsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRTFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksbUJBQW1CLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztnQkFFRCxPQUFPLGVBQWUsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsVUFBaUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsVUFBVSwyQ0FBNEIsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSx5Q0FBMkIsRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQzt3R0FqRVUsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvZGVFZGl0b3JDSGVscGVyLFxuICBDb2RlRWRpdG9yQ3BwSGVscGVyLFxuICBDb2RlRWRpdG9yQ1NoYXJwSGVscGVyLFxuICBDb2RlRWRpdG9yR29IZWxwZXIsXG4gIENvZGVFZGl0b3JKYXZhSGVscGVyLFxuICBDb2RlRWRpdG9ySmF2YXNjcmlwdEhlbHBlcixcbiAgQ29kZUVkaXRvcktvdGxpbkhlbHBlcixcbiAgQ29kZUVkaXRvclBocEhlbHBlcixcbiAgQ29kZUVkaXRvclB5dGhvbkhlbHBlcixcbiAgQ29kZUVkaXRvclJIZWxwZXIsXG4gIENvZGVFZGl0b3JSdWJ5SGVscGVyLFxuICBDb2RlRWRpdG9yU2NhbGFIZWxwZXIsXG4gIENvZGVFZGl0b3JTcWxIZWxwZXIsXG4gIENvZGVFZGl0b3JTd2lmdEhlbHBlcixcbiAgQ29kZUVkaXRvclR5cGVzY3JpcHRIZWxwZXIsXG59IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge1xuICBDb2RlRWRpdG9yRnVuY09wdGlvbnMsXG4gIENvZGVFZGl0b3JIZWxwZXIsXG4gIENvZGVFZGl0b3JMYW5ndWFnZXMsXG59IGZyb20gJy4vaGVscGVycy9jb2RlLWVkaXRvci1oZWxwZXIubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29kZUVkaXRvclNlcnZpY2Uge1xuICBwcml2YXRlIGhlbHBlcjogQ29kZUVkaXRvckhlbHBlcjtcblxuICBzZXRIZWxwZXIobGFuZ3VhZ2U6IHN0cmluZywgZnVuY1BhcmFtczogQ29kZUVkaXRvckZ1bmNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5oZWxwZXIgPSB0aGlzLmNyZWF0ZUhlbHBlcihsYW5ndWFnZSwgZnVuY1BhcmFtcyk7XG4gIH1cblxuICBnZXRJbml0Q29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5nZXRJbml0Q29kZSgpO1xuICB9XG5cbiAgZ2V0RWRpdG9yTGFuZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5nZXRFZGl0b3JMYW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUhlbHBlcihsYW5nOiBzdHJpbmcsIGZ1bmNQYXJhbXM6IENvZGVFZGl0b3JGdW5jT3B0aW9ucyk6IENvZGVFZGl0b3JIZWxwZXIge1xuICAgIC8vIHRvZG86IHJldmlldyB0aGlzIGxvZ2ljIGFjY29yZGluZyB0byBuZXcgVEFULCByZW1vdmUgZ2VuZXJhdGVkIGluaXQgY29kZSBpZiBub3QgbmVlZGVkID9cbiAgICBzd2l0Y2ggKGxhbmcgYXMgQ29kZUVkaXRvckxhbmd1YWdlcykge1xuICAgICAgY2FzZSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLkphdmFzY3JpcHQ6XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvckphdmFzY3JpcHRIZWxwZXIoZnVuY1BhcmFtcyk7XG4gICAgICBjYXNlIENvZGVFZGl0b3JMYW5ndWFnZXMuVHlwZXNjcmlwdDpcbiAgICAgICAgcmV0dXJuIG5ldyBDb2RlRWRpdG9yVHlwZXNjcmlwdEhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5QaHA6XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvclBocEhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5QeXRob246XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvclB5dGhvbkhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5KYXZhOlxuICAgICAgICByZXR1cm4gbmV3IENvZGVFZGl0b3JKYXZhSGVscGVyKGZ1bmNQYXJhbXMpO1xuICAgICAgY2FzZSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLlJ1Ynk6XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvclJ1YnlIZWxwZXIoZnVuY1BhcmFtcyk7XG4gICAgICBjYXNlIENvZGVFZGl0b3JMYW5ndWFnZXMuQzpcbiAgICAgICAgcmV0dXJuIG5ldyBDb2RlRWRpdG9yQ0hlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5DcHA6XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvckNwcEhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5SOlxuICAgICAgICByZXR1cm4gbmV3IENvZGVFZGl0b3JSSGVscGVyKGZ1bmNQYXJhbXMpO1xuICAgICAgY2FzZSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLlNjYWxhOlxuICAgICAgICByZXR1cm4gbmV3IENvZGVFZGl0b3JTY2FsYUhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5DU2hhcnA6XG4gICAgICBjYXNlIENvZGVFZGl0b3JMYW5ndWFnZXMuQ1NoYXJwTGVnYWN5OlxuICAgICAgICByZXR1cm4gbmV3IENvZGVFZGl0b3JDU2hhcnBIZWxwZXIoZnVuY1BhcmFtcyk7XG4gICAgICBjYXNlIENvZGVFZGl0b3JMYW5ndWFnZXMuR286XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvckdvSGVscGVyKGZ1bmNQYXJhbXMpO1xuICAgICAgY2FzZSBDb2RlRWRpdG9yTGFuZ3VhZ2VzLlNxbDpcbiAgICAgIGNhc2UgQ29kZUVkaXRvckxhbmd1YWdlcy5TcWxpdGU6XG4gICAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvclNxbEhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbmVkSGVscGVyID0gbGFuZyAmJiB0aGlzLmdldFZlcnNpb25lZEhlbHBlcihsYW5nLCBmdW5jUGFyYW1zKTtcblxuICAgICAgICBpZiAoIXZlcnNpb25lZEhlbHBlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbGFuZ3VhZ2UgJHtsYW5nfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmVyc2lvbmVkSGVscGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmVyc2lvbmVkSGVscGVyKGxhbmc6IHN0cmluZywgZnVuY1BhcmFtczogQ29kZUVkaXRvckZ1bmNPcHRpb25zKTogQ29kZUVkaXRvckhlbHBlciB7XG4gICAgaWYgKGxhbmcuc3RhcnRzV2l0aChDb2RlRWRpdG9yTGFuZ3VhZ2VzLktvdGxpbikpIHtcbiAgICAgIHJldHVybiBuZXcgQ29kZUVkaXRvcktvdGxpbkhlbHBlcihmdW5jUGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKGxhbmcuc3RhcnRzV2l0aChDb2RlRWRpdG9yTGFuZ3VhZ2VzLlN3aWZ0KSkge1xuICAgICAgcmV0dXJuIG5ldyBDb2RlRWRpdG9yU3dpZnRIZWxwZXIoZnVuY1BhcmFtcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,40 @@
1
+ import { CodeEditorHelperBase } from './code-editor-helper.base';
2
+ export class CodeEditorCHelper extends CodeEditorHelperBase {
3
+ functionOptions;
4
+ language = "c" /* CodeEditorLanguages.C */;
5
+ typesMap = {
6
+ boolean: 'bool',
7
+ int: 'int',
8
+ number: 'int',
9
+ double: 'double',
10
+ float: 'float',
11
+ str: 'char *',
12
+ array_boolean: 'bool *',
13
+ array_int: 'int *',
14
+ array_float: 'float *',
15
+ array_double: 'double *',
16
+ };
17
+ constructor(functionOptions) {
18
+ super();
19
+ this.functionOptions = functionOptions;
20
+ }
21
+ getInitCode() {
22
+ return `${this.getFunctionOpening()}\t //Insert your code here \n}`;
23
+ }
24
+ getFunctionOpening() {
25
+ const { name: funcName, returnType } = this.functionOptions;
26
+ const params = this.getParamsString();
27
+ const showingReturnType = this.parseType(returnType);
28
+ return `${showingReturnType} ${funcName}(${params}) {\n`;
29
+ }
30
+ getParamsString() {
31
+ const { params } = this.functionOptions;
32
+ let paramsString = '';
33
+ if (params && params.length > 0) {
34
+ params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));
35
+ paramsString = paramsString.slice(0, -2);
36
+ }
37
+ return paramsString;
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGUtZWRpdG9yL2hlbHBlcnMvYy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRakUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG9CQUFvQjtJQWVyQztJQWRwQixRQUFRLG1DQUF5QjtJQUNqQyxRQUFRLEdBQXVCO1FBQzdCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsR0FBRyxFQUFFLEtBQUs7UUFDVixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxPQUFPO1FBQ2QsR0FBRyxFQUFFLFFBQVE7UUFDYixhQUFhLEVBQUUsUUFBUTtRQUN2QixTQUFTLEVBQUUsT0FBTztRQUNsQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsVUFBVTtLQUN6QixDQUFDO0lBRUYsWUFBb0IsZUFBc0M7UUFDeEQsS0FBSyxFQUFFLENBQUM7UUFEVSxvQkFBZSxHQUFmLGVBQWUsQ0FBdUI7SUFFMUQsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGdDQUFnQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUM7SUFDM0QsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXRCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RixZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZUVkaXRvckhlbHBlckJhc2UgfSBmcm9tICcuL2NvZGUtZWRpdG9yLWhlbHBlci5iYXNlJztcbmltcG9ydCB7XG4gIENvZGVFZGl0b3JGdW5jT3B0aW9ucyxcbiAgQ29kZUVkaXRvckhlbHBlcixcbiAgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgQ29kZUVkaXRvclR5cGVzTWFwLFxufSBmcm9tICcuL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2RlRWRpdG9yQ0hlbHBlciBleHRlbmRzIENvZGVFZGl0b3JIZWxwZXJCYXNlIGltcGxlbWVudHMgQ29kZUVkaXRvckhlbHBlciB7XG4gIGxhbmd1YWdlID0gQ29kZUVkaXRvckxhbmd1YWdlcy5DO1xuICB0eXBlc01hcDogQ29kZUVkaXRvclR5cGVzTWFwID0ge1xuICAgIGJvb2xlYW46ICdib29sJyxcbiAgICBpbnQ6ICdpbnQnLFxuICAgIG51bWJlcjogJ2ludCcsXG4gICAgZG91YmxlOiAnZG91YmxlJyxcbiAgICBmbG9hdDogJ2Zsb2F0JyxcbiAgICBzdHI6ICdjaGFyIConLFxuICAgIGFycmF5X2Jvb2xlYW46ICdib29sIConLFxuICAgIGFycmF5X2ludDogJ2ludCAqJyxcbiAgICBhcnJheV9mbG9hdDogJ2Zsb2F0IConLFxuICAgIGFycmF5X2RvdWJsZTogJ2RvdWJsZSAqJyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ1bmN0aW9uT3B0aW9uczogQ29kZUVkaXRvckZ1bmNPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldEluaXRDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0RnVuY3Rpb25PcGVuaW5nKCl9XFx0IC8vSW5zZXJ0IHlvdXIgY29kZSBoZXJlIFxcbn1gO1xuICB9XG5cbiAgZ2V0RnVuY3Rpb25PcGVuaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lOiBmdW5jTmFtZSwgcmV0dXJuVHlwZSB9ID0gdGhpcy5mdW5jdGlvbk9wdGlvbnM7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRQYXJhbXNTdHJpbmcoKTtcbiAgICBjb25zdCBzaG93aW5nUmV0dXJuVHlwZSA9IHRoaXMucGFyc2VUeXBlKHJldHVyblR5cGUpO1xuXG4gICAgcmV0dXJuIGAke3Nob3dpbmdSZXR1cm5UeXBlfSAke2Z1bmNOYW1lfSgke3BhcmFtc30pIHtcXG5gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IHBhcmFtcyB9ID0gdGhpcy5mdW5jdGlvbk9wdGlvbnM7XG4gICAgbGV0IHBhcmFtc1N0cmluZyA9ICcnO1xuXG4gICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zLmZvckVhY2godmFsdWVzID0+IChwYXJhbXNTdHJpbmcgKz0gYCR7dGhpcy5wYXJzZVR5cGUodmFsdWVzLnR5cGUpfSAke3ZhbHVlcy5uYW1lfSwgYCkpO1xuICAgICAgcGFyYW1zU3RyaW5nID0gcGFyYW1zU3RyaW5nLnNsaWNlKDAsIC0yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zU3RyaW5nO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ export class CodeEditorHelperBase {
2
+ language;
3
+ typesMap;
4
+ getEditorLang() {
5
+ return this.language;
6
+ }
7
+ parseType(type) {
8
+ return this.typesMap[type];
9
+ }
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3ItaGVscGVyLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGUtZWRpdG9yL2hlbHBlcnMvY29kZS1lZGl0b3ItaGVscGVyLmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFnQixvQkFBb0I7SUFDOUIsUUFBUSxDQUFzQjtJQUM5QixRQUFRLENBQXFCO0lBSXZDLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVTLFNBQVMsQ0FBQyxJQUE4QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZUVkaXRvckxhbmd1YWdlcywgQ29kZUVkaXRvclR5cGVzTWFwIH0gZnJvbSAnLi9jb2RlLWVkaXRvci1oZWxwZXIubW9kZWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29kZUVkaXRvckhlbHBlckJhc2Uge1xuICBwcm90ZWN0ZWQgbGFuZ3VhZ2U6IENvZGVFZGl0b3JMYW5ndWFnZXM7XG4gIHByb3RlY3RlZCB0eXBlc01hcDogQ29kZUVkaXRvclR5cGVzTWFwO1xuXG4gIGFic3RyYWN0IGdldEZ1bmN0aW9uT3BlbmluZygpOiBzdHJpbmc7XG5cbiAgZ2V0RWRpdG9yTGFuZygpOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVR5cGUodHlwZToga2V5b2YgQ29kZUVkaXRvclR5cGVzTWFwKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50eXBlc01hcFt0eXBlXTtcbiAgfVxufVxuIl19