@futdevpro/nts-dynamo 1.15.13 → 1.15.15
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/.c8rc.json +26 -26
- package/.copilot/patterns.json +7 -7
- package/.cursor/rules/__assistant_guide.mdc +30 -30
- package/.cursor/rules/_ag_backend-structure.mdc +85 -85
- package/.cursor/rules/_ag_backend.mdc +16 -16
- package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
- package/.cursor/rules/_ag_frontend.mdc +39 -39
- package/.cursor/rules/_ag_import-rules.mdc +44 -44
- package/.cursor/rules/_ag_naming.mdc +115 -115
- package/.cursor/rules/_ag_should-be.mdc +6 -6
- package/.cursor/rules/ai_development_guide.md +60 -60
- package/.cursor/rules/cursor-rules.md +160 -160
- package/.cursor/rules/default-command.mdc +464 -464
- package/.cursor/rules/error_code_pattern.md +39 -39
- package/.cursor/rules/saved rule mcp server use.md +15 -15
- package/.vscode/settings.json +10 -10
- package/HOWTO.md +15 -15
- package/LICENSE +21 -21
- package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
- package/_specifications/BACKLOG.md +50 -22
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +4 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/interfaces/global-log-settings.interface.d.ts +11 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +19 -0
- package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-logs-routing-module.util.js +32 -0
- package/build/_modules/logs/get-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +4 -0
- package/build/_modules/logs/index.d.ts.map +1 -0
- package/build/_modules/logs/index.js +10 -0
- package/build/_modules/logs/index.js.map +1 -0
- package/build/_modules/logs/log-buffer.service.d.ts +38 -0
- package/build/_modules/logs/log-buffer.service.d.ts.map +1 -0
- package/build/_modules/logs/log-buffer.service.js +97 -0
- package/build/_modules/logs/log-buffer.service.js.map +1 -0
- package/build/_modules/logs/logs.controller.d.ts +27 -0
- package/build/_modules/logs/logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/logs.controller.js +90 -0
- package/build/_modules/logs/logs.controller.js.map +1 -0
- package/build/_modules/logs/logs.service.d.ts +40 -0
- package/build/_modules/logs/logs.service.d.ts.map +1 -0
- package/build/_modules/logs/logs.service.js +97 -0
- package/build/_modules/logs/logs.service.js.map +1 -0
- package/build/_modules/server/errors/errors.data-service.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.data-service.js +2 -1
- package/build/_modules/server/errors/errors.data-service.js.map +1 -1
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +362 -353
- package/scripts/run-coverage-tests.js +28 -28
- package/spec/support/helpers/spec-reporter-loader.js +359 -359
- package/spec/support/helpers/ts-node-helper.js +93 -93
- package/spec/support/jasmine.coverage.json +24 -24
- package/spec/support/jasmine.json +24 -24
- package/src/_collections/archive.util.spec.ts +57 -57
- package/src/_collections/archive.util.ts +18 -18
- package/src/_collections/atlas-default-db-options.const.ts +9 -9
- package/src/_collections/default-fallback-cache-max-age.const.spec.ts +11 -11
- package/src/_collections/default-fallback-cache-max-age.const.ts +2 -2
- package/src/_collections/default-not-found-page.const.spec.ts +19 -19
- package/src/_collections/default-not-found-page.const.ts +22 -22
- package/src/_collections/default-socket-path.const.spec.ts +12 -12
- package/src/_collections/default-socket-path.const.ts +2 -2
- package/src/_collections/get-environment-settings.util.spec.ts +210 -210
- package/src/_collections/get-environment-settings.util.ts +48 -48
- package/src/_collections/global-settings.const.ts +5 -0
- package/src/_collections/sample.env +21 -21
- package/src/_collections/star.controller.spec.ts +224 -224
- package/src/_collections/star.controller.ts +129 -129
- package/src/_enums/data-model-type.enum.ts +14 -14
- package/src/_enums/data-service-function.enum.ts +24 -24
- package/src/_enums/predefined-data-types.enum.ts +16 -16
- package/src/_enums/route-security.enum.ts +12 -12
- package/src/_models/control-models/api-call-params.control-model.spec.ts +152 -152
- package/src/_models/control-models/api-call-params.control-model.ts +142 -142
- package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -52
- package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/app-params.control-model.spec.ts +225 -225
- package/src/_models/control-models/app-params.control-model.ts +136 -136
- package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -31
- package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/endpoint-params.control-model.spec.ts +578 -578
- package/src/_models/control-models/endpoint-params.control-model.ts +526 -526
- package/src/_models/control-models/http-settings.control-model.spec.ts +77 -77
- package/src/_models/control-models/http-settings.control-model.ts +37 -37
- package/src/_models/control-models/system-control.control-model.spec.ts +27 -27
- package/src/_models/control-models/system-control.control-model.ts +12 -12
- package/src/_models/interfaces/certification-settings.interface.ts +7 -7
- package/src/_models/interfaces/environment-settings.interface.ts +59 -59
- package/src/_models/interfaces/global-log-settings.interface.ts +108 -96
- package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
- package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
- package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
- package/src/_models/interfaces/static-client-settings.interface.ts +28 -28
- package/src/_models/types/db-update.type.ts +100 -100
- package/src/_modules/ai/_models/ai-input-interfaces.ts +117 -117
- package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -16
- package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -138
- package/src/_modules/ai/_modules/anthropic/index.ts +5 -5
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -242
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.ts +639 -639
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -209
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.ts +85 -85
- package/src/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.ts +7 -7
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.ts +146 -146
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.ts +162 -162
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.ts +99 -99
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.ts +18 -18
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.ts +19 -19
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.ts +25 -25
- package/src/_modules/ai/_modules/document-ai/index.ts +28 -28
- package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -189
- package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -5
- package/src/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.ts +9 -9
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.ts +82 -82
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.ts +75 -75
- package/src/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.ts +45 -45
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.ts +57 -57
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.ts +292 -292
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -342
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -550
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.ts +630 -630
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +240 -240
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +98 -98
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -462
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +615 -615
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +437 -437
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +833 -833
- package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -157
- package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -98
- package/src/_modules/ai/_services/ai-embedding.service-base.ts +48 -48
- package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -229
- package/src/_modules/ai/_services/ai-llm-chat.service-base.ts +68 -68
- package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -250
- package/src/_modules/ai/_services/ai-llm.service-base.ts +332 -332
- package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -79
- package/src/_modules/ai/_services/ai-provider.service-base.ts +29 -29
- package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -59
- package/src/_modules/ai/index.ts +13 -13
- package/src/_modules/assistant/_collections/ass-global-settings.const.ts +13 -13
- package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -176
- package/src/_modules/assistant/_collections/ass.util.ts +50 -50
- package/src/_modules/assistant/_models/ass-global-settings.interface.ts +15 -15
- package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -140
- package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -192
- package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
- package/src/_modules/bot/_collections/bot-default-commands.const.ts +12 -12
- package/src/_modules/bot/_collections/bot-global-settings.const.ts +39 -39
- package/src/_modules/bot/_models/bot-channel-wrapper.interface.ts +62 -62
- package/src/_modules/bot/_models/bot-command.interface.ts +8 -8
- package/src/_modules/bot/_models/bot-global-settings.interface.ts +96 -96
- package/src/_modules/bot/_models/bot-last-mention-date.interface.ts +6 -6
- package/src/_modules/bot/_models/bot-last-message-date.interface.ts +5 -5
- package/src/_modules/bot/_models/bot-user-wrapper.interface.ts +41 -41
- package/src/_modules/bot/_modules/discord-bot/_models/dib-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -431
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -160
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +55 -55
- package/src/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.ts +15 -15
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -374
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.ts +447 -447
- package/src/_modules/bot/_modules/dynamo-bot/index.ts +15 -15
- package/src/_modules/bot/_modules/slack-bot/_models/slb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -344
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_modules/teams-bot/_models/teb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -345
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -116
- package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
- package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
- package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
- package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -49
- package/src/_modules/custom-data/custom-data.controller.ts +67 -67
- package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -54
- package/src/_modules/custom-data/custom-data.data-service.ts +21 -21
- package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -28
- package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +24 -24
- package/src/_modules/custom-data/index.ts +9 -9
- package/src/_modules/defaults/_collections/default-endpoints.util.ts +487 -487
- package/src/_modules/defaults/_models/default-user.data-model.ts +72 -72
- package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -269
- package/src/_modules/defaults/_services/default-auth.service.ts +177 -177
- package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -42
- package/src/_modules/defaults/_services/default-socket-events.service.ts +61 -61
- package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -187
- package/src/_modules/defaults/_services/default-user.data-service.ts +98 -98
- package/src/_modules/defaults/index.ts +17 -17
- package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +19 -19
- package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -366
- package/src/_modules/discord-assistant/_collections/dias.util.ts +132 -132
- package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +19 -19
- package/src/_modules/discord-assistant/_models/dias-knowledge.data-model.ts +52 -52
- package/src/_modules/discord-assistant/_services/dias-chunk.data-service.ts +177 -177
- package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -108
- package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +69 -69
- package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -22
- package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +27 -27
- package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -195
- package/src/_modules/discord-assistant/_services/dias.service-base.ts +76 -76
- package/src/_modules/discord-assistant/index.ts +38 -38
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -34
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.ts +11 -11
- package/src/_modules/discord-assistant-voiced/index.ts +36 -36
- package/src/_modules/discord-bot/_collections/dibo-default-commands.const.ts +16 -16
- package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +55 -55
- package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -214
- package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +387 -387
- package/src/_modules/discord-bot/_models/dibo-command.interface.ts +12 -12
- package/src/_modules/discord-bot/_models/dibo-global-settings.interface.ts +98 -98
- package/src/_modules/discord-bot/_models/dibo-last-mention-date.inteface.ts +7 -7
- package/src/_modules/discord-bot/_models/dibo-last-message-date.interface.ts +6 -6
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -154
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +153 -153
- package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -264
- package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +306 -306
- package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -408
- package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +487 -487
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -105
- package/src/_modules/discord-bot/index.ts +36 -36
- package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +19 -19
- package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -418
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.ts +276 -276
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +345 -345
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +330 -330
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +393 -393
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +220 -220
- package/src/_modules/local-vector-search/index.ts +11 -11
- package/src/_modules/logs/get-logs-routing-module.util.ts +36 -0
- package/src/_modules/logs/index.ts +3 -0
- package/src/_modules/logs/log-buffer.service.ts +101 -0
- package/src/_modules/logs/logs.controller.ts +109 -0
- package/src/_modules/logs/logs.service.ts +100 -0
- package/src/_modules/messaging/README.md +354 -354
- package/src/_modules/messaging/_collections/get-messaging-routing-module.util.ts +26 -26
- package/src/_modules/messaging/_collections/msg-global-settings.const.ts +22 -22
- package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -226
- package/src/_modules/messaging/_models/msg-global-settings.interface.ts +37 -37
- package/src/_modules/messaging/_services/msg-conversation.data-service.ts +146 -146
- package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -219
- package/src/_modules/messaging/_services/msg-events.service.ts +267 -267
- package/src/_modules/messaging/_services/msg-integration.control-service.ts +179 -179
- package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -147
- package/src/_modules/messaging/_services/msg-main.control-service.ts +571 -571
- package/src/_modules/messaging/_services/msg-message.data-service.ts +129 -129
- package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -201
- package/src/_modules/messaging/index.ts +30 -30
- package/src/_modules/mock/app-extended-server.mock.ts +201 -201
- package/src/_modules/mock/app-integration-test.mock.ts +51 -51
- package/src/_modules/mock/app-params.mock.spec.ts +21 -21
- package/src/_modules/mock/app-params.mock.ts +9 -9
- package/src/_modules/mock/app-server.mock.ts +188 -188
- package/src/_modules/mock/auth-service.mock.spec.ts +47 -47
- package/src/_modules/mock/auth-service.mock.ts +28 -28
- package/src/_modules/mock/controller.mock.spec.ts +26 -26
- package/src/_modules/mock/controller.mock.ts +16 -16
- package/src/_modules/mock/data-model.mock.spec.ts +111 -111
- package/src/_modules/mock/data-model.mock.ts +82 -82
- package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -24
- package/src/_modules/mock/email-service-collection.mock.ts +15 -15
- package/src/_modules/mock/email-service.mock.spec.ts +17 -17
- package/src/_modules/mock/email-service.mock.ts +20 -20
- package/src/_modules/mock/email-template.mock.html +14 -14
- package/src/_modules/mock/endpoint.mock.ts +91 -91
- package/src/_modules/mock/socket-client.mock.spec.ts +40 -40
- package/src/_modules/mock/socket-client.mock.ts +45 -45
- package/src/_modules/mock/socket-server.mock.spec.ts +44 -44
- package/src/_modules/mock/socket-server.mock.ts +46 -46
- package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -107
- package/src/_modules/oauth2/_routes/oauth2.controller.ts +98 -98
- package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -254
- package/src/_modules/oauth2/_services/oauth2.auth-service.ts +232 -232
- package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -585
- package/src/_modules/oauth2/_services/oauth2.control-service.ts +653 -653
- package/src/_modules/oauth2/index.ts +17 -17
- package/src/_modules/server/errors/errors.control-service.spec.ts +230 -230
- package/src/_modules/server/errors/errors.control-service.ts +69 -69
- package/src/_modules/server/errors/errors.controller.spec.ts +165 -165
- package/src/_modules/server/errors/errors.controller.ts +270 -270
- package/src/_modules/server/errors/errors.data-service.spec.ts +355 -355
- package/src/_modules/server/errors/errors.data-service.ts +2 -1
- package/src/_modules/server/index.ts +30 -30
- package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -70
- package/src/_modules/server/server-status/server-status-snapshot.control-service.ts +17 -17
- package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -77
- package/src/_modules/server/server-status/server-status-snapshot.data-service.ts +37 -37
- package/src/_modules/server/server-status/server-status.control-service.spec.ts +516 -516
- package/src/_modules/server/server-status/server-status.control-service.ts +336 -336
- package/src/_modules/server/server-status/server-status.controller.spec.ts +156 -156
- package/src/_modules/server/server-status/server-status.controller.ts +131 -131
- package/src/_modules/socket/_enums/socket-security.enum.ts +11 -11
- package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +32 -32
- package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +22 -22
- package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -164
- package/src/_modules/socket/_models/socket-presence.control-model.ts +210 -210
- package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +46 -46
- package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +22 -22
- package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -15
- package/src/_modules/socket/_services/socket-client.service.ts +260 -260
- package/src/_modules/socket/_services/socket-server.service.spec.ts +11 -11
- package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
- package/src/_modules/socket/app-extended.server.ts +630 -630
- package/src/_modules/socket/index.ts +42 -42
- package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -28
- package/src/_modules/test/get-test-routing-module.util.ts +23 -23
- package/src/_modules/test/index.ts +11 -11
- package/src/_modules/test/test.controller.spec.ts +72 -72
- package/src/_modules/test/test.controller.ts +115 -115
- package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
- package/src/_modules/usage/index.ts +15 -15
- package/src/_modules/usage/usage.controller.spec.ts +81 -81
- package/src/_modules/usage/usage.controller.ts +126 -126
- package/src/_modules/usage/usage.data-service.spec.ts +332 -332
- package/src/_modules/usage/usage.data-service.ts +185 -185
- package/src/_services/base/api.service-base.spec.ts +125 -125
- package/src/_services/base/api.service-base.ts +74 -74
- package/src/_services/base/archive-data.service.spec.ts +196 -196
- package/src/_services/base/archive-data.service.ts +216 -216
- package/src/_services/base/data.service.spec.ts +493 -493
- package/src/_services/base/data.service.ts +2525 -2525
- package/src/_services/base/db.service.spec.ts +73 -73
- package/src/_services/base/db.service.ts +1575 -1575
- package/src/_services/base/singleton.service-base.spec.ts +28 -28
- package/src/_services/base/singleton.service-base.ts +24 -24
- package/src/_services/base/singleton.service.spec.ts +114 -114
- package/src/_services/base/singleton.service.ts +38 -38
- package/src/_services/core/api.service.spec.ts +140 -140
- package/src/_services/core/auth.service.spec.ts +159 -159
- package/src/_services/core/auth.service.ts +174 -174
- package/src/_services/core/email.service.spec.ts +85 -85
- package/src/_services/core/email.service.ts +742 -742
- package/src/_services/core/global.service.spec.ts +275 -275
- package/src/_services/core/global.service.ts +461 -461
- package/src/_services/core/service-collection.service.spec.ts +46 -46
- package/src/_services/core/service-collection.service.ts +6 -6
- package/src/_services/route/controller.service.spec.ts +53 -53
- package/src/_services/route/controller.service.ts +148 -148
- package/src/_services/route/routing-module.service.spec.ts +98 -98
- package/src/_services/route/routing-module.service.ts +330 -330
- package/src/_services/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +94 -94
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
|
@@ -1,359 +1,359 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// EGYEDI SPEC REPORTER - JELENLEG KIKOMMENTEZVE
|
|
3
|
-
// ============================================================================
|
|
4
|
-
// Ez az egyedi spec reporter jelenleg kikommentezve van, és a default reporter
|
|
5
|
-
// van használatban.
|
|
6
|
-
//
|
|
7
|
-
// ÚJRA AKTIVÁLÁS:
|
|
8
|
-
// 1. spec/support/jasmine.json fájlban:
|
|
9
|
-
// - Kommentezd ki: "../spec/support/helpers/ts-node-helper.js"
|
|
10
|
-
// - Kommentezd be: "../spec/support/helpers/spec-reporter-loader.js"
|
|
11
|
-
//
|
|
12
|
-
// 2. scripts/run-coverage-tests.js fájlban:
|
|
13
|
-
// - Kommentezd ki: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper}`
|
|
14
|
-
// - Kommentezd be: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper} --require ${specReporterLoader}`
|
|
15
|
-
//
|
|
16
|
-
// Ez az egyedi reporter a következő funkciókat biztosítja:
|
|
17
|
-
// - SpecNameReporter: Kiírja a spec nevét és statisztikákat minden tesztnél
|
|
18
|
-
// - SlowTestReporter: Jelzi a lassú teszteket (>1 másodperc)
|
|
19
|
-
// - FailedTestsReporter: Részletes hibajelentés a sikertelen tesztekről
|
|
20
|
-
// - SpecReporter: Színes, formázott kimenet a jasmine-spec-reporter-rel
|
|
21
|
-
// ============================================================================
|
|
22
|
-
|
|
23
|
-
// A jasmine-spec-reporter betöltése és konfigurálása
|
|
24
|
-
// Ez a fájl helper-ként töltődik be, így a Jasmine inicializálása után fut
|
|
25
|
-
|
|
26
|
-
console.log('[spec-reporter-loader] Helper fájl betöltve');
|
|
27
|
-
|
|
28
|
-
// Egyedi reporter, ami kiírja a spec nevét, amikor elindul
|
|
29
|
-
class SpecNameReporter {
|
|
30
|
-
constructor() {
|
|
31
|
-
this.currentTestNumber = 0;
|
|
32
|
-
this.totalTests = 0;
|
|
33
|
-
this.successfulCount = 0;
|
|
34
|
-
this.failedCount = 0;
|
|
35
|
-
this.pendingCount = 0;
|
|
36
|
-
this.startTime = Date.now();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
jasmineStarted(result) {
|
|
40
|
-
// Get total number of specs from the result
|
|
41
|
-
if (result && result.totalSpecsDefined !== undefined) {
|
|
42
|
-
this.totalTests = result.totalSpecsDefined;
|
|
43
|
-
}
|
|
44
|
-
this.startTime = Date.now();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
specStarted(result) {
|
|
48
|
-
this.currentTestNumber++;
|
|
49
|
-
const stats = `[${this.currentTestNumber}/${this.totalTests || '?'}] (✓${this.successfulCount} ✗${this.failedCount} ⊘${this.pendingCount})`;
|
|
50
|
-
console.log(`▶ ${stats} ${result.fullName}`);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
specDone(result) {
|
|
54
|
-
if (result.status === 'passed') {
|
|
55
|
-
this.successfulCount++;
|
|
56
|
-
} else if (result.status === 'failed') {
|
|
57
|
-
this.failedCount++;
|
|
58
|
-
} else if (result.status === 'pending' || result.status === 'disabled') {
|
|
59
|
-
this.pendingCount++;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
jasmineDone(result) {
|
|
64
|
-
const duration = Date.now() - this.startTime;
|
|
65
|
-
const durationSeconds = (duration / 1000).toFixed(2);
|
|
66
|
-
|
|
67
|
-
console.log('\n' + '='.repeat(80));
|
|
68
|
-
console.log('TEST SUMMARY');
|
|
69
|
-
console.log('='.repeat(80));
|
|
70
|
-
console.log(`Total: ${this.totalTests || '?'} specs`);
|
|
71
|
-
console.log(`✓ Successful: ${this.successfulCount}`);
|
|
72
|
-
console.log(`✗ Failed: ${this.failedCount}`);
|
|
73
|
-
console.log(`⊘ Pending: ${this.pendingCount}`);
|
|
74
|
-
console.log(`Duration: ${durationSeconds}s`);
|
|
75
|
-
console.log('='.repeat(80) + '\n');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Slow test reporter - tracks tests that take longer than 1ms
|
|
80
|
-
class SlowTestReporter {
|
|
81
|
-
constructor() {
|
|
82
|
-
this.slowTests = [];
|
|
83
|
-
this.testStartTimes = new Map();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
specStarted(result) {
|
|
87
|
-
// Extract file name from fullName (format: "| Suite | Test" or "Suite | Test")
|
|
88
|
-
let file = 'Unknown';
|
|
89
|
-
if (result.fullName) {
|
|
90
|
-
const parts = result.fullName.split('|');
|
|
91
|
-
if (parts.length > 0) {
|
|
92
|
-
file = parts[0].trim() || 'Unknown';
|
|
93
|
-
}
|
|
94
|
-
// If it starts with |, try to get from description or suite
|
|
95
|
-
if (file === '' && result.description) {
|
|
96
|
-
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
this.testStartTimes.set(result.id, {
|
|
101
|
-
startTime: Date.now(),
|
|
102
|
-
fullName: result.fullName,
|
|
103
|
-
file: file
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
specDone(result) {
|
|
108
|
-
const testInfo = this.testStartTimes.get(result.id);
|
|
109
|
-
if (testInfo) {
|
|
110
|
-
const duration = Date.now() - testInfo.startTime;
|
|
111
|
-
if (duration > 1000) { // Only track tests longer than 1 second (1000ms)
|
|
112
|
-
this.slowTests.push({
|
|
113
|
-
file: testInfo.file,
|
|
114
|
-
test: result.fullName,
|
|
115
|
-
duration: duration
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
this.testStartTimes.delete(result.id);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
jasmineDone(result) {
|
|
123
|
-
if (this.slowTests.length > 0) {
|
|
124
|
-
console.log('\n' + '='.repeat(80));
|
|
125
|
-
console.log('SLOW TESTS REPORT (tests taking longer than 1 second)');
|
|
126
|
-
console.log('='.repeat(80));
|
|
127
|
-
|
|
128
|
-
// Group by file
|
|
129
|
-
const byFile = {};
|
|
130
|
-
this.slowTests.forEach(test => {
|
|
131
|
-
if (!byFile[test.file]) {
|
|
132
|
-
byFile[test.file] = [];
|
|
133
|
-
}
|
|
134
|
-
byFile[test.file].push(test);
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
// Sort files by total duration
|
|
138
|
-
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
139
|
-
file,
|
|
140
|
-
tests,
|
|
141
|
-
totalDuration: tests.reduce((sum, t) => sum + t.duration, 0)
|
|
142
|
-
})).sort((a, b) => b.totalDuration - a.totalDuration);
|
|
143
|
-
|
|
144
|
-
// Output report
|
|
145
|
-
fileEntries.forEach(({ file, tests, totalDuration }) => {
|
|
146
|
-
console.log(`\n${file} (total: ${totalDuration}ms)`);
|
|
147
|
-
tests.sort((a, b) => b.duration - a.duration).forEach(test => {
|
|
148
|
-
console.log(` ${test.duration}ms - ${test.test}`);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
console.log('\n' + '='.repeat(80));
|
|
153
|
-
console.log(`Total slow tests: ${this.slowTests.length}`);
|
|
154
|
-
console.log('='.repeat(80) + '\n');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Failed tests reporter - tracks all failed tests
|
|
160
|
-
class FailedTestsReporter {
|
|
161
|
-
constructor() {
|
|
162
|
-
this.failedTests = [];
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
specDone(result) {
|
|
166
|
-
if (result.status === 'failed') {
|
|
167
|
-
// Extract file name from fullName
|
|
168
|
-
let file = 'Unknown';
|
|
169
|
-
if (result.fullName) {
|
|
170
|
-
const parts = result.fullName.split('|');
|
|
171
|
-
if (parts.length > 0) {
|
|
172
|
-
file = parts[0].trim() || 'Unknown';
|
|
173
|
-
}
|
|
174
|
-
if (file === '' && result.description) {
|
|
175
|
-
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
this.failedTests.push({
|
|
180
|
-
file: file,
|
|
181
|
-
test: result.fullName,
|
|
182
|
-
message: result.failedExpectations && result.failedExpectations.length > 0
|
|
183
|
-
? result.failedExpectations[0].message
|
|
184
|
-
: 'Unknown error',
|
|
185
|
-
stack: result.failedExpectations && result.failedExpectations.length > 0
|
|
186
|
-
? result.failedExpectations[0].stack
|
|
187
|
-
: undefined
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
jasmineDone() {
|
|
193
|
-
if (this.failedTests.length > 0) {
|
|
194
|
-
console.log('\n' + '='.repeat(80));
|
|
195
|
-
console.log('FAILED TESTS REPORT');
|
|
196
|
-
console.log('='.repeat(80));
|
|
197
|
-
|
|
198
|
-
// Group by file
|
|
199
|
-
const byFile = {};
|
|
200
|
-
this.failedTests.forEach(test => {
|
|
201
|
-
if (!byFile[test.file]) {
|
|
202
|
-
byFile[test.file] = [];
|
|
203
|
-
}
|
|
204
|
-
byFile[test.file].push(test);
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
// Sort files by number of failures
|
|
208
|
-
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
209
|
-
file,
|
|
210
|
-
tests,
|
|
211
|
-
count: tests.length
|
|
212
|
-
})).sort((a, b) => b.count - a.count);
|
|
213
|
-
|
|
214
|
-
// Output report
|
|
215
|
-
fileEntries.forEach(({ file, tests, count }) => {
|
|
216
|
-
console.log(`\n${file} (${count} failure${count > 1 ? 's' : ''})`);
|
|
217
|
-
tests.forEach((test, index) => {
|
|
218
|
-
console.log(`\n ${index + 1}. ✗ ${test.test}`);
|
|
219
|
-
const raw = test.message || 'Unknown';
|
|
220
|
-
const message = raw.length > 150 ? raw.substring(0, 150) + '...' : raw;
|
|
221
|
-
console.log(` Message: ${(message || 'Unknown').split('\n')[0]}`);
|
|
222
|
-
|
|
223
|
-
// Print stacktrace if available
|
|
224
|
-
if (test.stack) {
|
|
225
|
-
// Filter out node_modules and jasmine internals for cleaner stacktrace
|
|
226
|
-
const stackLines = test.stack.split('\n')
|
|
227
|
-
.filter(line => {
|
|
228
|
-
const lowerLine = line.toLowerCase();
|
|
229
|
-
return !lowerLine.includes('node_modules') &&
|
|
230
|
-
!lowerLine.includes('jasmine') &&
|
|
231
|
-
!lowerLine.includes('spec-reporter');
|
|
232
|
-
})
|
|
233
|
-
.slice(0, 10); // Limit to first 10 relevant lines
|
|
234
|
-
|
|
235
|
-
if (stackLines.length > 0) {
|
|
236
|
-
console.log(` Stack:`);
|
|
237
|
-
stackLines.forEach(line => {
|
|
238
|
-
console.log(` ${line.trim()}`);
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
console.log('\n' + '='.repeat(80));
|
|
246
|
-
console.log(`Total failed tests: ${this.failedTests.length}`);
|
|
247
|
-
console.log('='.repeat(80) + '\n');
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// A jasmine-spec-reporter betöltése
|
|
253
|
-
const { SpecReporter } = require('jasmine-spec-reporter');
|
|
254
|
-
|
|
255
|
-
// Helper fájlként töltődik be, így a Jasmine már inicializálva van
|
|
256
|
-
const initReporters = () => {
|
|
257
|
-
const getJasmineEnv = () => {
|
|
258
|
-
// Módszer 1: globális jasmine objektum
|
|
259
|
-
if (typeof global !== 'undefined' && global.jasmine && typeof global.jasmine.getEnv === 'function') {
|
|
260
|
-
return global.jasmine.getEnv();
|
|
261
|
-
}
|
|
262
|
-
// Módszer 2: jasmine globális változó
|
|
263
|
-
if (typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function') {
|
|
264
|
-
return jasmine.getEnv();
|
|
265
|
-
}
|
|
266
|
-
return null;
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
const env = getJasmineEnv();
|
|
270
|
-
if (env) {
|
|
271
|
-
console.log('[spec-reporter-loader] Jasmine környezet megtalálva, reporterek inicializálása...');
|
|
272
|
-
const slowTestReporter = new SlowTestReporter();
|
|
273
|
-
const failedTestsReporter = new FailedTestsReporter();
|
|
274
|
-
|
|
275
|
-
const specNameReporter = new SpecNameReporter();
|
|
276
|
-
env.addReporter(specNameReporter);
|
|
277
|
-
env.addReporter(slowTestReporter);
|
|
278
|
-
env.addReporter(failedTestsReporter);
|
|
279
|
-
env.addReporter(new SpecReporter({
|
|
280
|
-
spec: {
|
|
281
|
-
displayPending: true,
|
|
282
|
-
displayDuration: true,
|
|
283
|
-
displaySuccessful: true,
|
|
284
|
-
displayFailed: true
|
|
285
|
-
},
|
|
286
|
-
suite: {
|
|
287
|
-
displayNumber: true
|
|
288
|
-
},
|
|
289
|
-
summary: {
|
|
290
|
-
displayDuration: true,
|
|
291
|
-
displayErrorMessages: true,
|
|
292
|
-
displayStacktrace: 'pretty',
|
|
293
|
-
displaySuccessful: true,
|
|
294
|
-
displayFailed: true
|
|
295
|
-
},
|
|
296
|
-
colors: {
|
|
297
|
-
enabled: true
|
|
298
|
-
}
|
|
299
|
-
}));
|
|
300
|
-
|
|
301
|
-
// Ensure reports are printed before coverage report
|
|
302
|
-
// Order: slow tests, failed tests, then summary
|
|
303
|
-
env.addReporter({
|
|
304
|
-
jasmineDone: (result) => {
|
|
305
|
-
// Print slow tests report first
|
|
306
|
-
slowTestReporter.jasmineDone(result);
|
|
307
|
-
// Print failed tests report second
|
|
308
|
-
failedTestsReporter.jasmineDone(result);
|
|
309
|
-
// Print summary last (before coverage table)
|
|
310
|
-
specNameReporter.jasmineDone(result);
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva');
|
|
315
|
-
return true;
|
|
316
|
-
}
|
|
317
|
-
return false;
|
|
318
|
-
};
|
|
319
|
-
|
|
320
|
-
// Próbáljuk meg azonnal
|
|
321
|
-
if (!initReporters()) {
|
|
322
|
-
console.log('[spec-reporter-loader] Jasmine környezet még nem elérhető, várunk...');
|
|
323
|
-
|
|
324
|
-
// Próbáljuk meg több időpontban is, hasonlóan a timeout-helper-hez
|
|
325
|
-
setTimeout(() => {
|
|
326
|
-
if (!initReporters()) {
|
|
327
|
-
setTimeout(() => {
|
|
328
|
-
if (!initReporters()) {
|
|
329
|
-
setTimeout(() => {
|
|
330
|
-
if (!initReporters()) {
|
|
331
|
-
// Ha még mindig nem sikerült, várunk és újra próbáljuk
|
|
332
|
-
let attempts = 0;
|
|
333
|
-
const maxAttempts = 100;
|
|
334
|
-
|
|
335
|
-
const interval = setInterval(() => {
|
|
336
|
-
attempts++;
|
|
337
|
-
if (initReporters()) {
|
|
338
|
-
clearInterval(interval);
|
|
339
|
-
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva', attempts, 'próbálkozás után');
|
|
340
|
-
} else if (attempts >= maxAttempts) {
|
|
341
|
-
clearInterval(interval);
|
|
342
|
-
console.error('[spec-reporter-loader] Failed to initialize reporters after', maxAttempts, 'attempts');
|
|
343
|
-
console.error('[spec-reporter-loader] Debug info:', {
|
|
344
|
-
hasGlobal: typeof global !== 'undefined',
|
|
345
|
-
hasJasmine: typeof jasmine !== 'undefined',
|
|
346
|
-
globalJasmine: typeof global !== 'undefined' && global.jasmine,
|
|
347
|
-
jasmineGetEnv: typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function'
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
}, 50);
|
|
351
|
-
}
|
|
352
|
-
}, 100);
|
|
353
|
-
}
|
|
354
|
-
}, 50);
|
|
355
|
-
}
|
|
356
|
-
}, 0);
|
|
357
|
-
} else {
|
|
358
|
-
console.log('[spec-reporter-loader] Reporterek azonnal inicializálva');
|
|
359
|
-
}
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// EGYEDI SPEC REPORTER - JELENLEG KIKOMMENTEZVE
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Ez az egyedi spec reporter jelenleg kikommentezve van, és a default reporter
|
|
5
|
+
// van használatban.
|
|
6
|
+
//
|
|
7
|
+
// ÚJRA AKTIVÁLÁS:
|
|
8
|
+
// 1. spec/support/jasmine.json fájlban:
|
|
9
|
+
// - Kommentezd ki: "../spec/support/helpers/ts-node-helper.js"
|
|
10
|
+
// - Kommentezd be: "../spec/support/helpers/spec-reporter-loader.js"
|
|
11
|
+
//
|
|
12
|
+
// 2. scripts/run-coverage-tests.js fájlban:
|
|
13
|
+
// - Kommentezd ki: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper}`
|
|
14
|
+
// - Kommentezd be: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper} --require ${specReporterLoader}`
|
|
15
|
+
//
|
|
16
|
+
// Ez az egyedi reporter a következő funkciókat biztosítja:
|
|
17
|
+
// - SpecNameReporter: Kiírja a spec nevét és statisztikákat minden tesztnél
|
|
18
|
+
// - SlowTestReporter: Jelzi a lassú teszteket (>1 másodperc)
|
|
19
|
+
// - FailedTestsReporter: Részletes hibajelentés a sikertelen tesztekről
|
|
20
|
+
// - SpecReporter: Színes, formázott kimenet a jasmine-spec-reporter-rel
|
|
21
|
+
// ============================================================================
|
|
22
|
+
|
|
23
|
+
// A jasmine-spec-reporter betöltése és konfigurálása
|
|
24
|
+
// Ez a fájl helper-ként töltődik be, így a Jasmine inicializálása után fut
|
|
25
|
+
|
|
26
|
+
console.log('[spec-reporter-loader] Helper fájl betöltve');
|
|
27
|
+
|
|
28
|
+
// Egyedi reporter, ami kiírja a spec nevét, amikor elindul
|
|
29
|
+
class SpecNameReporter {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.currentTestNumber = 0;
|
|
32
|
+
this.totalTests = 0;
|
|
33
|
+
this.successfulCount = 0;
|
|
34
|
+
this.failedCount = 0;
|
|
35
|
+
this.pendingCount = 0;
|
|
36
|
+
this.startTime = Date.now();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
jasmineStarted(result) {
|
|
40
|
+
// Get total number of specs from the result
|
|
41
|
+
if (result && result.totalSpecsDefined !== undefined) {
|
|
42
|
+
this.totalTests = result.totalSpecsDefined;
|
|
43
|
+
}
|
|
44
|
+
this.startTime = Date.now();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
specStarted(result) {
|
|
48
|
+
this.currentTestNumber++;
|
|
49
|
+
const stats = `[${this.currentTestNumber}/${this.totalTests || '?'}] (✓${this.successfulCount} ✗${this.failedCount} ⊘${this.pendingCount})`;
|
|
50
|
+
console.log(`▶ ${stats} ${result.fullName}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
specDone(result) {
|
|
54
|
+
if (result.status === 'passed') {
|
|
55
|
+
this.successfulCount++;
|
|
56
|
+
} else if (result.status === 'failed') {
|
|
57
|
+
this.failedCount++;
|
|
58
|
+
} else if (result.status === 'pending' || result.status === 'disabled') {
|
|
59
|
+
this.pendingCount++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
jasmineDone(result) {
|
|
64
|
+
const duration = Date.now() - this.startTime;
|
|
65
|
+
const durationSeconds = (duration / 1000).toFixed(2);
|
|
66
|
+
|
|
67
|
+
console.log('\n' + '='.repeat(80));
|
|
68
|
+
console.log('TEST SUMMARY');
|
|
69
|
+
console.log('='.repeat(80));
|
|
70
|
+
console.log(`Total: ${this.totalTests || '?'} specs`);
|
|
71
|
+
console.log(`✓ Successful: ${this.successfulCount}`);
|
|
72
|
+
console.log(`✗ Failed: ${this.failedCount}`);
|
|
73
|
+
console.log(`⊘ Pending: ${this.pendingCount}`);
|
|
74
|
+
console.log(`Duration: ${durationSeconds}s`);
|
|
75
|
+
console.log('='.repeat(80) + '\n');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Slow test reporter - tracks tests that take longer than 1ms
|
|
80
|
+
class SlowTestReporter {
|
|
81
|
+
constructor() {
|
|
82
|
+
this.slowTests = [];
|
|
83
|
+
this.testStartTimes = new Map();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
specStarted(result) {
|
|
87
|
+
// Extract file name from fullName (format: "| Suite | Test" or "Suite | Test")
|
|
88
|
+
let file = 'Unknown';
|
|
89
|
+
if (result.fullName) {
|
|
90
|
+
const parts = result.fullName.split('|');
|
|
91
|
+
if (parts.length > 0) {
|
|
92
|
+
file = parts[0].trim() || 'Unknown';
|
|
93
|
+
}
|
|
94
|
+
// If it starts with |, try to get from description or suite
|
|
95
|
+
if (file === '' && result.description) {
|
|
96
|
+
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
this.testStartTimes.set(result.id, {
|
|
101
|
+
startTime: Date.now(),
|
|
102
|
+
fullName: result.fullName,
|
|
103
|
+
file: file
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
specDone(result) {
|
|
108
|
+
const testInfo = this.testStartTimes.get(result.id);
|
|
109
|
+
if (testInfo) {
|
|
110
|
+
const duration = Date.now() - testInfo.startTime;
|
|
111
|
+
if (duration > 1000) { // Only track tests longer than 1 second (1000ms)
|
|
112
|
+
this.slowTests.push({
|
|
113
|
+
file: testInfo.file,
|
|
114
|
+
test: result.fullName,
|
|
115
|
+
duration: duration
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
this.testStartTimes.delete(result.id);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
jasmineDone(result) {
|
|
123
|
+
if (this.slowTests.length > 0) {
|
|
124
|
+
console.log('\n' + '='.repeat(80));
|
|
125
|
+
console.log('SLOW TESTS REPORT (tests taking longer than 1 second)');
|
|
126
|
+
console.log('='.repeat(80));
|
|
127
|
+
|
|
128
|
+
// Group by file
|
|
129
|
+
const byFile = {};
|
|
130
|
+
this.slowTests.forEach(test => {
|
|
131
|
+
if (!byFile[test.file]) {
|
|
132
|
+
byFile[test.file] = [];
|
|
133
|
+
}
|
|
134
|
+
byFile[test.file].push(test);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// Sort files by total duration
|
|
138
|
+
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
139
|
+
file,
|
|
140
|
+
tests,
|
|
141
|
+
totalDuration: tests.reduce((sum, t) => sum + t.duration, 0)
|
|
142
|
+
})).sort((a, b) => b.totalDuration - a.totalDuration);
|
|
143
|
+
|
|
144
|
+
// Output report
|
|
145
|
+
fileEntries.forEach(({ file, tests, totalDuration }) => {
|
|
146
|
+
console.log(`\n${file} (total: ${totalDuration}ms)`);
|
|
147
|
+
tests.sort((a, b) => b.duration - a.duration).forEach(test => {
|
|
148
|
+
console.log(` ${test.duration}ms - ${test.test}`);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
console.log('\n' + '='.repeat(80));
|
|
153
|
+
console.log(`Total slow tests: ${this.slowTests.length}`);
|
|
154
|
+
console.log('='.repeat(80) + '\n');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Failed tests reporter - tracks all failed tests
|
|
160
|
+
class FailedTestsReporter {
|
|
161
|
+
constructor() {
|
|
162
|
+
this.failedTests = [];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
specDone(result) {
|
|
166
|
+
if (result.status === 'failed') {
|
|
167
|
+
// Extract file name from fullName
|
|
168
|
+
let file = 'Unknown';
|
|
169
|
+
if (result.fullName) {
|
|
170
|
+
const parts = result.fullName.split('|');
|
|
171
|
+
if (parts.length > 0) {
|
|
172
|
+
file = parts[0].trim() || 'Unknown';
|
|
173
|
+
}
|
|
174
|
+
if (file === '' && result.description) {
|
|
175
|
+
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
this.failedTests.push({
|
|
180
|
+
file: file,
|
|
181
|
+
test: result.fullName,
|
|
182
|
+
message: result.failedExpectations && result.failedExpectations.length > 0
|
|
183
|
+
? result.failedExpectations[0].message
|
|
184
|
+
: 'Unknown error',
|
|
185
|
+
stack: result.failedExpectations && result.failedExpectations.length > 0
|
|
186
|
+
? result.failedExpectations[0].stack
|
|
187
|
+
: undefined
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
jasmineDone() {
|
|
193
|
+
if (this.failedTests.length > 0) {
|
|
194
|
+
console.log('\n' + '='.repeat(80));
|
|
195
|
+
console.log('FAILED TESTS REPORT');
|
|
196
|
+
console.log('='.repeat(80));
|
|
197
|
+
|
|
198
|
+
// Group by file
|
|
199
|
+
const byFile = {};
|
|
200
|
+
this.failedTests.forEach(test => {
|
|
201
|
+
if (!byFile[test.file]) {
|
|
202
|
+
byFile[test.file] = [];
|
|
203
|
+
}
|
|
204
|
+
byFile[test.file].push(test);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Sort files by number of failures
|
|
208
|
+
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
209
|
+
file,
|
|
210
|
+
tests,
|
|
211
|
+
count: tests.length
|
|
212
|
+
})).sort((a, b) => b.count - a.count);
|
|
213
|
+
|
|
214
|
+
// Output report
|
|
215
|
+
fileEntries.forEach(({ file, tests, count }) => {
|
|
216
|
+
console.log(`\n${file} (${count} failure${count > 1 ? 's' : ''})`);
|
|
217
|
+
tests.forEach((test, index) => {
|
|
218
|
+
console.log(`\n ${index + 1}. ✗ ${test.test}`);
|
|
219
|
+
const raw = test.message || 'Unknown';
|
|
220
|
+
const message = raw.length > 150 ? raw.substring(0, 150) + '...' : raw;
|
|
221
|
+
console.log(` Message: ${(message || 'Unknown').split('\n')[0]}`);
|
|
222
|
+
|
|
223
|
+
// Print stacktrace if available
|
|
224
|
+
if (test.stack) {
|
|
225
|
+
// Filter out node_modules and jasmine internals for cleaner stacktrace
|
|
226
|
+
const stackLines = test.stack.split('\n')
|
|
227
|
+
.filter(line => {
|
|
228
|
+
const lowerLine = line.toLowerCase();
|
|
229
|
+
return !lowerLine.includes('node_modules') &&
|
|
230
|
+
!lowerLine.includes('jasmine') &&
|
|
231
|
+
!lowerLine.includes('spec-reporter');
|
|
232
|
+
})
|
|
233
|
+
.slice(0, 10); // Limit to first 10 relevant lines
|
|
234
|
+
|
|
235
|
+
if (stackLines.length > 0) {
|
|
236
|
+
console.log(` Stack:`);
|
|
237
|
+
stackLines.forEach(line => {
|
|
238
|
+
console.log(` ${line.trim()}`);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
console.log('\n' + '='.repeat(80));
|
|
246
|
+
console.log(`Total failed tests: ${this.failedTests.length}`);
|
|
247
|
+
console.log('='.repeat(80) + '\n');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// A jasmine-spec-reporter betöltése
|
|
253
|
+
const { SpecReporter } = require('jasmine-spec-reporter');
|
|
254
|
+
|
|
255
|
+
// Helper fájlként töltődik be, így a Jasmine már inicializálva van
|
|
256
|
+
const initReporters = () => {
|
|
257
|
+
const getJasmineEnv = () => {
|
|
258
|
+
// Módszer 1: globális jasmine objektum
|
|
259
|
+
if (typeof global !== 'undefined' && global.jasmine && typeof global.jasmine.getEnv === 'function') {
|
|
260
|
+
return global.jasmine.getEnv();
|
|
261
|
+
}
|
|
262
|
+
// Módszer 2: jasmine globális változó
|
|
263
|
+
if (typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function') {
|
|
264
|
+
return jasmine.getEnv();
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
const env = getJasmineEnv();
|
|
270
|
+
if (env) {
|
|
271
|
+
console.log('[spec-reporter-loader] Jasmine környezet megtalálva, reporterek inicializálása...');
|
|
272
|
+
const slowTestReporter = new SlowTestReporter();
|
|
273
|
+
const failedTestsReporter = new FailedTestsReporter();
|
|
274
|
+
|
|
275
|
+
const specNameReporter = new SpecNameReporter();
|
|
276
|
+
env.addReporter(specNameReporter);
|
|
277
|
+
env.addReporter(slowTestReporter);
|
|
278
|
+
env.addReporter(failedTestsReporter);
|
|
279
|
+
env.addReporter(new SpecReporter({
|
|
280
|
+
spec: {
|
|
281
|
+
displayPending: true,
|
|
282
|
+
displayDuration: true,
|
|
283
|
+
displaySuccessful: true,
|
|
284
|
+
displayFailed: true
|
|
285
|
+
},
|
|
286
|
+
suite: {
|
|
287
|
+
displayNumber: true
|
|
288
|
+
},
|
|
289
|
+
summary: {
|
|
290
|
+
displayDuration: true,
|
|
291
|
+
displayErrorMessages: true,
|
|
292
|
+
displayStacktrace: 'pretty',
|
|
293
|
+
displaySuccessful: true,
|
|
294
|
+
displayFailed: true
|
|
295
|
+
},
|
|
296
|
+
colors: {
|
|
297
|
+
enabled: true
|
|
298
|
+
}
|
|
299
|
+
}));
|
|
300
|
+
|
|
301
|
+
// Ensure reports are printed before coverage report
|
|
302
|
+
// Order: slow tests, failed tests, then summary
|
|
303
|
+
env.addReporter({
|
|
304
|
+
jasmineDone: (result) => {
|
|
305
|
+
// Print slow tests report first
|
|
306
|
+
slowTestReporter.jasmineDone(result);
|
|
307
|
+
// Print failed tests report second
|
|
308
|
+
failedTestsReporter.jasmineDone(result);
|
|
309
|
+
// Print summary last (before coverage table)
|
|
310
|
+
specNameReporter.jasmineDone(result);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva');
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
return false;
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
// Próbáljuk meg azonnal
|
|
321
|
+
if (!initReporters()) {
|
|
322
|
+
console.log('[spec-reporter-loader] Jasmine környezet még nem elérhető, várunk...');
|
|
323
|
+
|
|
324
|
+
// Próbáljuk meg több időpontban is, hasonlóan a timeout-helper-hez
|
|
325
|
+
setTimeout(() => {
|
|
326
|
+
if (!initReporters()) {
|
|
327
|
+
setTimeout(() => {
|
|
328
|
+
if (!initReporters()) {
|
|
329
|
+
setTimeout(() => {
|
|
330
|
+
if (!initReporters()) {
|
|
331
|
+
// Ha még mindig nem sikerült, várunk és újra próbáljuk
|
|
332
|
+
let attempts = 0;
|
|
333
|
+
const maxAttempts = 100;
|
|
334
|
+
|
|
335
|
+
const interval = setInterval(() => {
|
|
336
|
+
attempts++;
|
|
337
|
+
if (initReporters()) {
|
|
338
|
+
clearInterval(interval);
|
|
339
|
+
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva', attempts, 'próbálkozás után');
|
|
340
|
+
} else if (attempts >= maxAttempts) {
|
|
341
|
+
clearInterval(interval);
|
|
342
|
+
console.error('[spec-reporter-loader] Failed to initialize reporters after', maxAttempts, 'attempts');
|
|
343
|
+
console.error('[spec-reporter-loader] Debug info:', {
|
|
344
|
+
hasGlobal: typeof global !== 'undefined',
|
|
345
|
+
hasJasmine: typeof jasmine !== 'undefined',
|
|
346
|
+
globalJasmine: typeof global !== 'undefined' && global.jasmine,
|
|
347
|
+
jasmineGetEnv: typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function'
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}, 50);
|
|
351
|
+
}
|
|
352
|
+
}, 100);
|
|
353
|
+
}
|
|
354
|
+
}, 50);
|
|
355
|
+
}
|
|
356
|
+
}, 0);
|
|
357
|
+
} else {
|
|
358
|
+
console.log('[spec-reporter-loader] Reporterek azonnal inicializálva');
|
|
359
|
+
}
|