@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.
- package/README.md +49 -2
- package/esm2022/index.mjs +12 -0
- package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
- package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
- package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
- package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
- package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
- package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
- package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
- package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
- package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
- package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
- package/esm2022/lib/components/panel/panel.component.mjs +34 -0
- package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
- package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
- package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
- package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
- package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
- package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
- package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
- package/esm2022/lib/config/index.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
- package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
- package/esm2022/lib/models/auto-saved-data.mjs +2 -0
- package/esm2022/lib/models/code-event.mjs +2 -0
- package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
- package/esm2022/lib/models/configs.mjs +2 -0
- package/esm2022/lib/models/language-change-action.mjs +2 -0
- package/esm2022/lib/models/lat-languages.mjs +3 -0
- package/esm2022/lib/models/mixpanel-events.mjs +2 -0
- package/esm2022/lib/models/mode.mjs +2 -0
- package/esm2022/lib/models/paste-data.mjs +2 -0
- package/esm2022/lib/models/programming-language.mjs +2 -0
- package/esm2022/lib/models/test-cases.mjs +7 -0
- package/esm2022/lib/models/theme.mjs +2 -0
- package/esm2022/lib/models/translations.mjs +2 -0
- package/esm2022/lib/models/view-mode.mjs +8 -0
- package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
- package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
- package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
- package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
- package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
- package/esm2022/lib/services/configurations.service.mjs +89 -0
- package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
- package/esm2022/lib/services/storage.service.mjs +624 -0
- package/esm2022/lib/services/test-cases.service.mjs +30 -0
- package/esm2022/lib/services/theme.service.mjs +36 -0
- package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
- package/esm2022/lib/utils/resize-element.mjs +13 -0
- package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
- package/esm2022/shared/index.mjs +5 -0
- package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
- package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
- package/esm2022/shared/lib/components/index.mjs +3 -0
- package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
- package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
- package/esm2022/shared/lib/models/answer.mjs +2 -0
- package/esm2022/shared/lib/models/assessment.mjs +2 -0
- package/esm2022/shared/lib/models/environment.mjs +2 -0
- package/esm2022/shared/lib/models/index.mjs +9 -0
- package/esm2022/shared/lib/models/question-component.mjs +2 -0
- package/esm2022/shared/lib/models/question.mjs +2 -0
- package/esm2022/shared/lib/models/test.mjs +2 -0
- package/esm2022/shared/lib/models/translations.mjs +2 -0
- package/esm2022/shared/lib/models/window.mjs +2 -0
- package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
- package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
- package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
- package/esm2022/shared/lib/services/index.mjs +10 -0
- package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
- package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
- package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
- package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
- package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
- package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
- package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
- package/esm2022/shared/test-mocks/index.mjs +3 -0
- package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
- package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
- package/{src/index.ts → index.d.ts} +2 -19
- package/lib/components/code-editor/code-editor.component.d.ts +54 -0
- package/lib/components/code-editor/code-editor.service.d.ts +12 -0
- package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
- package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
- package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
- package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
- package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
- package/lib/components/coding-question/coding-question.component.d.ts +45 -0
- package/lib/components/coding-section/coding-section.component.d.ts +52 -0
- package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
- package/lib/components/configurations/configurations.component.d.ts +40 -0
- package/lib/components/instructions/instructions.component.d.ts +48 -0
- package/lib/components/panel/panel.component.d.ts +12 -0
- package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
- package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
- package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
- package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
- package/lib/components/tests/test-results.component.d.ts +33 -0
- package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
- package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
- package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
- package/lib/config/tgo-coding-test.config.d.ts +24 -0
- package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
- package/lib/config/tgo-coding-test.token.d.ts +9 -0
- package/lib/models/auto-saved-data.d.ts +42 -0
- package/lib/models/code-event.d.ts +15 -0
- package/lib/models/coderunner-execution-results.d.ts +51 -0
- package/lib/models/configs.d.ts +15 -0
- package/lib/models/language-change-action.d.ts +4 -0
- package/lib/models/lat-languages.d.ts +8 -0
- package/lib/models/mixpanel-events.d.ts +3 -0
- package/lib/models/mode.d.ts +5 -0
- package/lib/models/paste-data.d.ts +4 -0
- package/lib/models/programming-language.d.ts +8 -0
- package/lib/models/test-cases.d.ts +67 -0
- package/lib/models/theme.d.ts +4 -0
- package/lib/models/translations.d.ts +1 -0
- package/lib/models/view-mode.d.ts +6 -0
- package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
- package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
- package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
- package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
- package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
- package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
- package/lib/services/coding-test-config.service.d.ts +38 -0
- package/lib/services/configurations.service.d.ts +37 -0
- package/lib/services/lib-coding-test.service.d.ts +69 -0
- package/lib/services/storage.service.d.ts +83 -0
- package/lib/services/test-cases.service.d.ts +12 -0
- package/lib/services/theme.service.d.ts +17 -0
- package/lib/utils/additional-languages/erlang.d.ts +37 -0
- package/lib/utils/resize-element.d.ts +2 -0
- package/lib/utils/time-to-ms.util.d.ts +1 -0
- package/package.json +18 -7
- package/shared/index.d.ts +4 -0
- package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
- package/shared/lib/components/audio-animation/index.d.ts +1 -0
- package/shared/lib/components/index.d.ts +2 -0
- package/shared/lib/components/vimeo-video/index.d.ts +1 -0
- package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
- package/shared/lib/models/answer.d.ts +17 -0
- package/shared/lib/models/assessment.d.ts +80 -0
- package/shared/lib/models/environment.d.ts +1 -0
- package/shared/lib/models/index.d.ts +8 -0
- package/shared/lib/models/question-component.d.ts +54 -0
- package/shared/lib/models/question.d.ts +102 -0
- package/shared/lib/models/test.d.ts +81 -0
- package/shared/lib/models/translations.d.ts +1 -0
- package/shared/lib/models/window.d.ts +6 -0
- package/shared/lib/services/api/api.service.d.ts +25 -0
- package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
- package/shared/lib/services/environment/environment.service.d.ts +6 -0
- package/shared/lib/services/index.d.ts +9 -0
- package/shared/lib/services/localization/languages.model.d.ts +15 -0
- package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
- package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
- package/shared/lib/services/media/media.service.d.ts +29 -0
- package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
- package/shared/lib/services/theme/theme.service.d.ts +8 -0
- package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
- package/shared/test-mocks/index.d.ts +2 -0
- package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
- package/.eslintrc.json +0 -45
- package/jest.config.ts +0 -21
- package/ng-package.json +0 -14
- package/project.json +0 -36
- package/src/lib/components/.gitkeep +0 -0
- package/src/lib/components/code-editor/code-editor.component.html +0 -10
- package/src/lib/components/code-editor/code-editor.component.scss +0 -21
- package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
- package/src/lib/components/code-editor/code-editor.component.ts +0 -369
- package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
- package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
- package/src/lib/components/code-editor/code-editor.service.ts +0 -94
- package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
- package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
- package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
- package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
- package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
- package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
- package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
- package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
- package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
- package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
- package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
- package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
- package/src/lib/components/coding-question/coding-question.component.html +0 -78
- package/src/lib/components/coding-question/coding-question.component.scss +0 -76
- package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
- package/src/lib/components/coding-question/coding-question.component.ts +0 -102
- package/src/lib/components/coding-section/coding-section.component.html +0 -82
- package/src/lib/components/coding-section/coding-section.component.scss +0 -64
- package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
- package/src/lib/components/coding-section/coding-section.component.ts +0 -187
- package/src/lib/components/coding-test.module.ts +0 -124
- package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
- package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
- package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
- package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
- package/src/lib/components/configurations/configurations.component.html +0 -57
- package/src/lib/components/configurations/configurations.component.scss +0 -42
- package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
- package/src/lib/components/configurations/configurations.component.ts +0 -98
- package/src/lib/components/instructions/instructions.component.html +0 -41
- package/src/lib/components/instructions/instructions.component.scss +0 -167
- package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
- package/src/lib/components/instructions/instructions.component.ts +0 -138
- package/src/lib/components/panel/panel.component.html +0 -19
- package/src/lib/components/panel/panel.component.scss +0 -41
- package/src/lib/components/panel/panel.component.spec.ts +0 -40
- package/src/lib/components/panel/panel.component.ts +0 -34
- package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
- package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
- package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
- package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
- package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
- package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
- package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
- package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
- package/src/lib/components/tests/test-results.component.html +0 -119
- package/src/lib/components/tests/test-results.component.scss +0 -189
- package/src/lib/components/tests/test-results.component.spec.ts +0 -140
- package/src/lib/components/tests/test-results.component.ts +0 -98
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
- package/src/lib/config/tgo-coding-test.config.ts +0 -26
- package/src/lib/config/tgo-coding-test.token.ts +0 -21
- package/src/lib/models/.gitkeep +0 -0
- package/src/lib/models/auto-saved-data.ts +0 -51
- package/src/lib/models/code-event.ts +0 -17
- package/src/lib/models/coderunner-execution-results.ts +0 -58
- package/src/lib/models/coding-lib.mocks.ts +0 -246
- package/src/lib/models/configs.ts +0 -18
- package/src/lib/models/language-change-action.ts +0 -4
- package/src/lib/models/lat-languages.ts +0 -12
- package/src/lib/models/mixpanel-events.ts +0 -3
- package/src/lib/models/mode.ts +0 -5
- package/src/lib/models/paste-data.ts +0 -4
- package/src/lib/models/programming-language.ts +0 -9
- package/src/lib/models/test-cases.ts +0 -74
- package/src/lib/models/theme.ts +0 -5
- package/src/lib/models/translations.ts +0 -1
- package/src/lib/models/view-mode.ts +0 -6
- package/src/lib/services/.gitkeep +0 -0
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
- package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
- package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
- package/src/lib/services/coding-test-config.service.ts +0 -48
- package/src/lib/services/configurations.service.mocks.ts +0 -77
- package/src/lib/services/configurations.service.spec.ts +0 -79
- package/src/lib/services/configurations.service.ts +0 -111
- package/src/lib/services/index.ts +0 -0
- package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
- package/src/lib/services/lib-coding-test.service.ts +0 -157
- package/src/lib/services/local-storage.service.mocks.ts +0 -22
- package/src/lib/services/storage.service.spec.ts +0 -1120
- package/src/lib/services/storage.service.ts +0 -729
- package/src/lib/services/test-cases.service.spec.ts +0 -53
- package/src/lib/services/test-cases.service.ts +0 -29
- package/src/lib/services/theme.service.spec.ts +0 -76
- package/src/lib/services/theme.service.ts +0 -34
- package/src/lib/styles/mixins.scss +0 -86
- package/src/lib/styles/styles.scss +0 -112
- package/src/lib/styles/variables.scss +0 -105
- package/src/lib/utils/.gitkeep +0 -0
- package/src/lib/utils/additional-languages/erlang.ts +0 -115
- package/src/lib/utils/resize-element.ts +0 -15
- package/src/lib/utils/time-to-ms.util.ts +0 -10
- package/src/test-setup.ts +0 -1
- package/tsconfig.json +0 -16
- package/tsconfig.lib.json +0 -12
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
- /package/{src/assets → assets}/i18n/en.json +0 -0
- /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
|
|
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
|