@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,209 +1,209 @@
|
|
|
1
|
-
|
|
2
|
-
import { DyNTS_DAI_Document_Util } from './dai-document.util';
|
|
3
|
-
import { DyNTS_DAI_DocPage } from '../_models/data-models/dai-doc-page.data-model';
|
|
4
|
-
import { DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
5
|
-
|
|
6
|
-
describe('| DyNTS_DAI_Document_Util', () => {
|
|
7
|
-
describe('| getClickupPageLink', () => {
|
|
8
|
-
it('| should generate ClickUp page link', () => {
|
|
9
|
-
const result = DyNTS_DAI_Document_Util.getClickupPageLink(
|
|
10
|
-
'Test Page',
|
|
11
|
-
'workspace-123',
|
|
12
|
-
'doc-456',
|
|
13
|
-
'page-789'
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
expect(result).toContain('Test Page');
|
|
17
|
-
expect(result).toContain('https://app.clickup.com/workspace-123/v/dc/doc-456/page-789');
|
|
18
|
-
expect(result).toMatch(/\[Test Page\]\(https:\/\/app\.clickup\.com\/workspace-123\/v\/dc\/doc-456\/page-789\)/);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
describe('| validateDocumentPage', () => {
|
|
23
|
-
it('| should return true for valid page', () => {
|
|
24
|
-
const page = new DyNTS_DAI_DocPage({
|
|
25
|
-
name: 'Test Page',
|
|
26
|
-
content: 'Test content',
|
|
27
|
-
documentId: 'doc-123',
|
|
28
|
-
_id: 'page-123',
|
|
29
|
-
parentedPath: [],
|
|
30
|
-
allFlaggedParents: [],
|
|
31
|
-
allFlaggedParentsMerged: '',
|
|
32
|
-
filePath: '',
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
36
|
-
|
|
37
|
-
expect(result).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('| should return false when name is missing', () => {
|
|
41
|
-
const logSpy = spyOn(DyFM_Log, 'error');
|
|
42
|
-
const page = new DyNTS_DAI_DocPage({
|
|
43
|
-
name: '',
|
|
44
|
-
content: 'Test content',
|
|
45
|
-
documentId: 'doc-123',
|
|
46
|
-
_id: 'page-123',
|
|
47
|
-
parentedPath: [],
|
|
48
|
-
allFlaggedParents: [],
|
|
49
|
-
allFlaggedParentsMerged: '',
|
|
50
|
-
filePath: '',
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
54
|
-
|
|
55
|
-
expect(result).toBe(false);
|
|
56
|
-
expect(logSpy).toHaveBeenCalled();
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('| should return false when content is missing', () => {
|
|
60
|
-
const logSpy = spyOn(DyFM_Log, 'error');
|
|
61
|
-
const page = new DyNTS_DAI_DocPage({
|
|
62
|
-
name: 'Test Page',
|
|
63
|
-
content: '',
|
|
64
|
-
documentId: 'doc-123',
|
|
65
|
-
_id: 'page-123',
|
|
66
|
-
parentedPath: [],
|
|
67
|
-
allFlaggedParents: [],
|
|
68
|
-
allFlaggedParentsMerged: '',
|
|
69
|
-
filePath: '',
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
73
|
-
|
|
74
|
-
expect(result).toBe(false);
|
|
75
|
-
expect(logSpy).toHaveBeenCalled();
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe('| normalizeContent', () => {
|
|
80
|
-
it('| should normalize line endings from CRLF to LF', () => {
|
|
81
|
-
const content = 'Line 1\r\nLine 2\r\nLine 3';
|
|
82
|
-
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
83
|
-
|
|
84
|
-
expect(result).toBe('Line 1\nLine 2\nLine 3');
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('| should normalize line endings from CR to LF', () => {
|
|
88
|
-
const content = 'Line 1\rLine 2\rLine 3';
|
|
89
|
-
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
90
|
-
|
|
91
|
-
expect(result).toBe('Line 1\nLine 2\nLine 3');
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('| should trim leading and trailing whitespace', () => {
|
|
95
|
-
const content = ' Line 1\nLine 2 ';
|
|
96
|
-
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
97
|
-
|
|
98
|
-
expect(result).toBe('Line 1\nLine 2');
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('| should handle mixed line endings', () => {
|
|
102
|
-
const content = 'Line 1\r\nLine 2\rLine 3\nLine 4';
|
|
103
|
-
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
104
|
-
|
|
105
|
-
expect(result).toBe('Line 1\nLine 2\nLine 3\nLine 4');
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
describe('| extractMetadata', () => {
|
|
110
|
-
it('| should extract title from first header', () => {
|
|
111
|
-
const content = '# Title\n\nContent here';
|
|
112
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
113
|
-
|
|
114
|
-
expect(result.title).toBe('Title');
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('| should extract word count', () => {
|
|
118
|
-
const content = 'This is a test content with multiple words';
|
|
119
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
120
|
-
|
|
121
|
-
// Content.split(/\s+/) returns 8 words: "This", "is", "a", "test", "content", "with", "multiple", "words"
|
|
122
|
-
expect(result.wordCount).toBe(8);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('| should extract character count', () => {
|
|
126
|
-
const content = 'Test content';
|
|
127
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
128
|
-
|
|
129
|
-
expect(result.characterCount).toBe(content.length);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('| should extract header count', () => {
|
|
133
|
-
const content = '# Header 1\n## Header 2\n### Header 3';
|
|
134
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
135
|
-
|
|
136
|
-
expect(result.headerCount).toBe(3);
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('| should return 0 header count when no headers', () => {
|
|
140
|
-
const content = 'Just plain text without headers';
|
|
141
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
142
|
-
|
|
143
|
-
expect(result.headerCount).toBe(0);
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('| should extract all metadata fields', () => {
|
|
147
|
-
const content = '# Document Title\n\nThis is the content of the document.';
|
|
148
|
-
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
149
|
-
|
|
150
|
-
expect(result.title).toBe('Document Title');
|
|
151
|
-
expect(result.wordCount).toBeGreaterThan(0);
|
|
152
|
-
expect(result.characterCount).toBeGreaterThan(0);
|
|
153
|
-
expect(result.headerCount).toBe(1);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
describe('| isEmpty', () => {
|
|
158
|
-
it('| should return true for empty string', () => {
|
|
159
|
-
expect(DyNTS_DAI_Document_Util.isEmpty('')).toBe(true);
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it('| should return true for whitespace only', () => {
|
|
163
|
-
expect(DyNTS_DAI_Document_Util.isEmpty(' \n\t ')).toBe(true);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('| should return false for content with text', () => {
|
|
167
|
-
expect(DyNTS_DAI_Document_Util.isEmpty('Some content')).toBe(false);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('| should return true for null or undefined', () => {
|
|
171
|
-
expect(DyNTS_DAI_Document_Util.isEmpty(null as any)).toBe(true);
|
|
172
|
-
expect(DyNTS_DAI_Document_Util.isEmpty(undefined as any)).toBe(true);
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
describe('| getPreview', () => {
|
|
177
|
-
it('| should return full content when shorter than maxLength', () => {
|
|
178
|
-
const content = 'Short content';
|
|
179
|
-
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
180
|
-
|
|
181
|
-
expect(result).toBe('Short content');
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('| should truncate content when longer than maxLength', () => {
|
|
185
|
-
const content = 'A'.repeat(300);
|
|
186
|
-
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
187
|
-
|
|
188
|
-
expect(result.length).toBe(203); // 200 + '...'
|
|
189
|
-
expect(result.endsWith('...')).toBe(true);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it('| should use default maxLength of 200', () => {
|
|
193
|
-
const content = 'A'.repeat(250);
|
|
194
|
-
const result = DyNTS_DAI_Document_Util.getPreview(content);
|
|
195
|
-
|
|
196
|
-
expect(result.length).toBe(203); // 200 + '...'
|
|
197
|
-
expect(result.endsWith('...')).toBe(true);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
it('| should handle exact maxLength', () => {
|
|
201
|
-
const content = 'A'.repeat(200);
|
|
202
|
-
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
203
|
-
|
|
204
|
-
expect(result).toBe(content);
|
|
205
|
-
expect(result.endsWith('...')).toBe(false);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
|
|
1
|
+
|
|
2
|
+
import { DyNTS_DAI_Document_Util } from './dai-document.util';
|
|
3
|
+
import { DyNTS_DAI_DocPage } from '../_models/data-models/dai-doc-page.data-model';
|
|
4
|
+
import { DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
5
|
+
|
|
6
|
+
describe('| DyNTS_DAI_Document_Util', () => {
|
|
7
|
+
describe('| getClickupPageLink', () => {
|
|
8
|
+
it('| should generate ClickUp page link', () => {
|
|
9
|
+
const result = DyNTS_DAI_Document_Util.getClickupPageLink(
|
|
10
|
+
'Test Page',
|
|
11
|
+
'workspace-123',
|
|
12
|
+
'doc-456',
|
|
13
|
+
'page-789'
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
expect(result).toContain('Test Page');
|
|
17
|
+
expect(result).toContain('https://app.clickup.com/workspace-123/v/dc/doc-456/page-789');
|
|
18
|
+
expect(result).toMatch(/\[Test Page\]\(https:\/\/app\.clickup\.com\/workspace-123\/v\/dc\/doc-456\/page-789\)/);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe('| validateDocumentPage', () => {
|
|
23
|
+
it('| should return true for valid page', () => {
|
|
24
|
+
const page = new DyNTS_DAI_DocPage({
|
|
25
|
+
name: 'Test Page',
|
|
26
|
+
content: 'Test content',
|
|
27
|
+
documentId: 'doc-123',
|
|
28
|
+
_id: 'page-123',
|
|
29
|
+
parentedPath: [],
|
|
30
|
+
allFlaggedParents: [],
|
|
31
|
+
allFlaggedParentsMerged: '',
|
|
32
|
+
filePath: '',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
36
|
+
|
|
37
|
+
expect(result).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('| should return false when name is missing', () => {
|
|
41
|
+
const logSpy = spyOn(DyFM_Log, 'error');
|
|
42
|
+
const page = new DyNTS_DAI_DocPage({
|
|
43
|
+
name: '',
|
|
44
|
+
content: 'Test content',
|
|
45
|
+
documentId: 'doc-123',
|
|
46
|
+
_id: 'page-123',
|
|
47
|
+
parentedPath: [],
|
|
48
|
+
allFlaggedParents: [],
|
|
49
|
+
allFlaggedParentsMerged: '',
|
|
50
|
+
filePath: '',
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
54
|
+
|
|
55
|
+
expect(result).toBe(false);
|
|
56
|
+
expect(logSpy).toHaveBeenCalled();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('| should return false when content is missing', () => {
|
|
60
|
+
const logSpy = spyOn(DyFM_Log, 'error');
|
|
61
|
+
const page = new DyNTS_DAI_DocPage({
|
|
62
|
+
name: 'Test Page',
|
|
63
|
+
content: '',
|
|
64
|
+
documentId: 'doc-123',
|
|
65
|
+
_id: 'page-123',
|
|
66
|
+
parentedPath: [],
|
|
67
|
+
allFlaggedParents: [],
|
|
68
|
+
allFlaggedParentsMerged: '',
|
|
69
|
+
filePath: '',
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const result = DyNTS_DAI_Document_Util.validateDocumentPage(page);
|
|
73
|
+
|
|
74
|
+
expect(result).toBe(false);
|
|
75
|
+
expect(logSpy).toHaveBeenCalled();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
describe('| normalizeContent', () => {
|
|
80
|
+
it('| should normalize line endings from CRLF to LF', () => {
|
|
81
|
+
const content = 'Line 1\r\nLine 2\r\nLine 3';
|
|
82
|
+
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
83
|
+
|
|
84
|
+
expect(result).toBe('Line 1\nLine 2\nLine 3');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('| should normalize line endings from CR to LF', () => {
|
|
88
|
+
const content = 'Line 1\rLine 2\rLine 3';
|
|
89
|
+
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
90
|
+
|
|
91
|
+
expect(result).toBe('Line 1\nLine 2\nLine 3');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('| should trim leading and trailing whitespace', () => {
|
|
95
|
+
const content = ' Line 1\nLine 2 ';
|
|
96
|
+
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
97
|
+
|
|
98
|
+
expect(result).toBe('Line 1\nLine 2');
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('| should handle mixed line endings', () => {
|
|
102
|
+
const content = 'Line 1\r\nLine 2\rLine 3\nLine 4';
|
|
103
|
+
const result = DyNTS_DAI_Document_Util.normalizeContent(content);
|
|
104
|
+
|
|
105
|
+
expect(result).toBe('Line 1\nLine 2\nLine 3\nLine 4');
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
describe('| extractMetadata', () => {
|
|
110
|
+
it('| should extract title from first header', () => {
|
|
111
|
+
const content = '# Title\n\nContent here';
|
|
112
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
113
|
+
|
|
114
|
+
expect(result.title).toBe('Title');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('| should extract word count', () => {
|
|
118
|
+
const content = 'This is a test content with multiple words';
|
|
119
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
120
|
+
|
|
121
|
+
// Content.split(/\s+/) returns 8 words: "This", "is", "a", "test", "content", "with", "multiple", "words"
|
|
122
|
+
expect(result.wordCount).toBe(8);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('| should extract character count', () => {
|
|
126
|
+
const content = 'Test content';
|
|
127
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
128
|
+
|
|
129
|
+
expect(result.characterCount).toBe(content.length);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('| should extract header count', () => {
|
|
133
|
+
const content = '# Header 1\n## Header 2\n### Header 3';
|
|
134
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
135
|
+
|
|
136
|
+
expect(result.headerCount).toBe(3);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('| should return 0 header count when no headers', () => {
|
|
140
|
+
const content = 'Just plain text without headers';
|
|
141
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
142
|
+
|
|
143
|
+
expect(result.headerCount).toBe(0);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('| should extract all metadata fields', () => {
|
|
147
|
+
const content = '# Document Title\n\nThis is the content of the document.';
|
|
148
|
+
const result = DyNTS_DAI_Document_Util.extractMetadata(content);
|
|
149
|
+
|
|
150
|
+
expect(result.title).toBe('Document Title');
|
|
151
|
+
expect(result.wordCount).toBeGreaterThan(0);
|
|
152
|
+
expect(result.characterCount).toBeGreaterThan(0);
|
|
153
|
+
expect(result.headerCount).toBe(1);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
describe('| isEmpty', () => {
|
|
158
|
+
it('| should return true for empty string', () => {
|
|
159
|
+
expect(DyNTS_DAI_Document_Util.isEmpty('')).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('| should return true for whitespace only', () => {
|
|
163
|
+
expect(DyNTS_DAI_Document_Util.isEmpty(' \n\t ')).toBe(true);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('| should return false for content with text', () => {
|
|
167
|
+
expect(DyNTS_DAI_Document_Util.isEmpty('Some content')).toBe(false);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('| should return true for null or undefined', () => {
|
|
171
|
+
expect(DyNTS_DAI_Document_Util.isEmpty(null as any)).toBe(true);
|
|
172
|
+
expect(DyNTS_DAI_Document_Util.isEmpty(undefined as any)).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe('| getPreview', () => {
|
|
177
|
+
it('| should return full content when shorter than maxLength', () => {
|
|
178
|
+
const content = 'Short content';
|
|
179
|
+
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
180
|
+
|
|
181
|
+
expect(result).toBe('Short content');
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('| should truncate content when longer than maxLength', () => {
|
|
185
|
+
const content = 'A'.repeat(300);
|
|
186
|
+
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
187
|
+
|
|
188
|
+
expect(result.length).toBe(203); // 200 + '...'
|
|
189
|
+
expect(result.endsWith('...')).toBe(true);
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('| should use default maxLength of 200', () => {
|
|
193
|
+
const content = 'A'.repeat(250);
|
|
194
|
+
const result = DyNTS_DAI_Document_Util.getPreview(content);
|
|
195
|
+
|
|
196
|
+
expect(result.length).toBe(203); // 200 + '...'
|
|
197
|
+
expect(result.endsWith('...')).toBe(true);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it('| should handle exact maxLength', () => {
|
|
201
|
+
const content = 'A'.repeat(200);
|
|
202
|
+
const result = DyNTS_DAI_Document_Util.getPreview(content, 200);
|
|
203
|
+
|
|
204
|
+
expect(result).toBe(content);
|
|
205
|
+
expect(result.endsWith('...')).toBe(false);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import { DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
2
|
-
import { DyNTS_DAI_DocPage } from '../_models/data-models/dai-doc-page.data-model';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Generic document utility functions
|
|
6
|
-
* Provider-agnostic document operations
|
|
7
|
-
*/
|
|
8
|
-
export class DyNTS_DAI_Document_Util {
|
|
9
|
-
|
|
10
|
-
static getClickupPageLink(pageName: string, workspaceId: string, documentId: string, pageId: string): string {
|
|
11
|
-
// https://app.clickup.com/9012753333/v/dc/8ck7cxn-692/8ck7cxn-1052
|
|
12
|
-
const link: string = `https://app.clickup.com/${workspaceId}/v/dc/${documentId}/${pageId}`;
|
|
13
|
-
return `[${pageName}](${link})`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Validate document page structure
|
|
18
|
-
*/
|
|
19
|
-
static validateDocumentPage(page: DyNTS_DAI_DocPage): boolean {
|
|
20
|
-
if (!page.name) {
|
|
21
|
-
DyFM_Log.error('Document page validation failed: missing name');
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (!page.content) {
|
|
26
|
-
DyFM_Log.error('Document page validation failed: missing content');
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Normalize document page content
|
|
35
|
-
*/
|
|
36
|
-
static normalizeContent(content: string): string {
|
|
37
|
-
return content
|
|
38
|
-
.replace(/\r\n/g, '\n') // Normalize line endings
|
|
39
|
-
.replace(/\r/g, '\n') // Handle old Mac line endings
|
|
40
|
-
.trim(); // Remove leading/trailing whitespace
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Extract metadata from document content
|
|
45
|
-
*/
|
|
46
|
-
static extractMetadata(content: string): Record<string, any> {
|
|
47
|
-
const metadata: Record<string, any> = {};
|
|
48
|
-
|
|
49
|
-
// Extract title from first header
|
|
50
|
-
const titleMatch: RegExpMatchArray | null = content.match(/^#\s+(.+)$/m);
|
|
51
|
-
if (titleMatch) {
|
|
52
|
-
metadata.title = titleMatch[1].trim();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Extract word count
|
|
56
|
-
metadata.wordCount = content.split(/\s+/).length;
|
|
57
|
-
|
|
58
|
-
// Extract character count
|
|
59
|
-
metadata.characterCount = content.length;
|
|
60
|
-
|
|
61
|
-
// Extract header count
|
|
62
|
-
const headerMatches = content.match(/^#{1,6}\s+.+$/gm);
|
|
63
|
-
metadata.headerCount = headerMatches ? headerMatches.length : 0;
|
|
64
|
-
|
|
65
|
-
return metadata;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Check if content is empty or whitespace only
|
|
70
|
-
*/
|
|
71
|
-
static isEmpty(content: string): boolean {
|
|
72
|
-
return !content || content.trim().length === 0;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Get content preview (first N characters)
|
|
77
|
-
*/
|
|
78
|
-
static getPreview(content: string, maxLength: number = 200): string {
|
|
79
|
-
if (content.length <= maxLength) {
|
|
80
|
-
return content;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return content.substring(0, maxLength) + '...';
|
|
84
|
-
}
|
|
85
|
-
}
|
|
1
|
+
import { DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
2
|
+
import { DyNTS_DAI_DocPage } from '../_models/data-models/dai-doc-page.data-model';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generic document utility functions
|
|
6
|
+
* Provider-agnostic document operations
|
|
7
|
+
*/
|
|
8
|
+
export class DyNTS_DAI_Document_Util {
|
|
9
|
+
|
|
10
|
+
static getClickupPageLink(pageName: string, workspaceId: string, documentId: string, pageId: string): string {
|
|
11
|
+
// https://app.clickup.com/9012753333/v/dc/8ck7cxn-692/8ck7cxn-1052
|
|
12
|
+
const link: string = `https://app.clickup.com/${workspaceId}/v/dc/${documentId}/${pageId}`;
|
|
13
|
+
return `[${pageName}](${link})`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Validate document page structure
|
|
18
|
+
*/
|
|
19
|
+
static validateDocumentPage(page: DyNTS_DAI_DocPage): boolean {
|
|
20
|
+
if (!page.name) {
|
|
21
|
+
DyFM_Log.error('Document page validation failed: missing name');
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!page.content) {
|
|
26
|
+
DyFM_Log.error('Document page validation failed: missing content');
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Normalize document page content
|
|
35
|
+
*/
|
|
36
|
+
static normalizeContent(content: string): string {
|
|
37
|
+
return content
|
|
38
|
+
.replace(/\r\n/g, '\n') // Normalize line endings
|
|
39
|
+
.replace(/\r/g, '\n') // Handle old Mac line endings
|
|
40
|
+
.trim(); // Remove leading/trailing whitespace
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Extract metadata from document content
|
|
45
|
+
*/
|
|
46
|
+
static extractMetadata(content: string): Record<string, any> {
|
|
47
|
+
const metadata: Record<string, any> = {};
|
|
48
|
+
|
|
49
|
+
// Extract title from first header
|
|
50
|
+
const titleMatch: RegExpMatchArray | null = content.match(/^#\s+(.+)$/m);
|
|
51
|
+
if (titleMatch) {
|
|
52
|
+
metadata.title = titleMatch[1].trim();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Extract word count
|
|
56
|
+
metadata.wordCount = content.split(/\s+/).length;
|
|
57
|
+
|
|
58
|
+
// Extract character count
|
|
59
|
+
metadata.characterCount = content.length;
|
|
60
|
+
|
|
61
|
+
// Extract header count
|
|
62
|
+
const headerMatches = content.match(/^#{1,6}\s+.+$/gm);
|
|
63
|
+
metadata.headerCount = headerMatches ? headerMatches.length : 0;
|
|
64
|
+
|
|
65
|
+
return metadata;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Check if content is empty or whitespace only
|
|
70
|
+
*/
|
|
71
|
+
static isEmpty(content: string): boolean {
|
|
72
|
+
return !content || content.trim().length === 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get content preview (first N characters)
|
|
77
|
+
*/
|
|
78
|
+
static getPreview(content: string, maxLength: number = 200): string {
|
|
79
|
+
if (content.length <= maxLength) {
|
|
80
|
+
return content;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return content.substring(0, maxLength) + '...';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export enum DyNTS_DAI_CompareResult_Type {
|
|
4
|
-
equal = 'equal',
|
|
5
|
-
modified = 'modified',
|
|
6
|
-
new = 'new',
|
|
7
|
-
deleted = 'deleted',
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
export enum DyNTS_DAI_CompareResult_Type {
|
|
4
|
+
equal = 'equal',
|
|
5
|
+
modified = 'modified',
|
|
6
|
+
new = 'new',
|
|
7
|
+
deleted = 'deleted',
|
|
8
8
|
}
|