@explorer02/cfm-survey-sdk 0.1.0 → 0.1.1
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/dist/cli/index.d.mts +1 -0
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +38 -40
- package/dist/cli/index.mjs +39 -0
- package/dist/index.d.mts +127 -0
- package/dist/index.d.ts +127 -3
- package/dist/index.js +1 -6
- package/dist/index.mjs +1 -0
- package/package.json +6 -5
- package/dist/analytics/analyticsTracker.d.ts +0 -3
- package/dist/analytics/analyticsTracker.d.ts.map +0 -1
- package/dist/analytics/analyticsTracker.js +0 -34
- package/dist/analytics/analyticsTracker.js.map +0 -1
- package/dist/analytics/types.d.ts +0 -76
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js +0 -3
- package/dist/analytics/types.js.map +0 -1
- package/dist/cli/const.d.ts +0 -10
- package/dist/cli/const.d.ts.map +0 -1
- package/dist/cli/const.js +0 -13
- package/dist/cli/const.js.map +0 -1
- package/dist/cli/constants.d.ts +0 -9
- package/dist/cli/constants.js +0 -12
- package/dist/cli/deploy.d.ts +0 -2
- package/dist/cli/deploy.d.ts.map +0 -1
- package/dist/cli/deploy.js +0 -21
- package/dist/cli/deploy.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/init.d.ts +0 -2
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -145
- package/dist/cli/init.js.map +0 -1
- package/dist/cli/questionnaire/engine.d.ts +0 -22
- package/dist/cli/questionnaire/engine.d.ts.map +0 -1
- package/dist/cli/questionnaire/engine.js +0 -218
- package/dist/cli/questionnaire/engine.js.map +0 -1
- package/dist/cli/questionnaire/questionnaire-cli.d.ts +0 -2
- package/dist/cli/questionnaire/questionnaire-cli.d.ts.map +0 -1
- package/dist/cli/questionnaire/questionnaire-cli.js +0 -3
- package/dist/cli/questionnaire/questionnaire-cli.js.map +0 -1
- package/dist/cli/questionnaire/questions.d.ts +0 -3
- package/dist/cli/questionnaire/questions.d.ts.map +0 -1
- package/dist/cli/questionnaire/questions.js +0 -337
- package/dist/cli/questionnaire/questions.js.map +0 -1
- package/dist/cli/questionnaire/runner.d.ts +0 -3
- package/dist/cli/questionnaire/runner.d.ts.map +0 -1
- package/dist/cli/questionnaire/runner.js +0 -161
- package/dist/cli/questionnaire/runner.js.map +0 -1
- package/dist/cli/questionnaire/server.d.ts +0 -11
- package/dist/cli/questionnaire/server.d.ts.map +0 -1
- package/dist/cli/questionnaire/server.js +0 -80
- package/dist/cli/questionnaire/server.js.map +0 -1
- package/dist/cli/questionnaire/types.d.ts +0 -95
- package/dist/cli/questionnaire/types.d.ts.map +0 -1
- package/dist/cli/questionnaire/types.js +0 -7
- package/dist/cli/questionnaire/types.js.map +0 -1
- package/dist/cli/utils/exec.d.ts +0 -4
- package/dist/cli/utils/exec.d.ts.map +0 -1
- package/dist/cli/utils/exec.js +0 -41
- package/dist/cli/utils/exec.js.map +0 -1
- package/dist/cli/utils/nodeCheck.d.ts +0 -2
- package/dist/cli/utils/nodeCheck.d.ts.map +0 -1
- package/dist/cli/utils/nodeCheck.js +0 -72
- package/dist/cli/utils/nodeCheck.js.map +0 -1
- package/dist/cli/utils/prompts.d.ts +0 -2
- package/dist/cli/utils/prompts.d.ts.map +0 -1
- package/dist/cli/utils/prompts.js +0 -29
- package/dist/cli/utils/prompts.js.map +0 -1
- package/dist/cli/utils/vercelCliCheck.d.ts +0 -6
- package/dist/cli/utils/vercelCliCheck.d.ts.map +0 -1
- package/dist/cli/utils/vercelCliCheck.js +0 -38
- package/dist/cli/utils/vercelCliCheck.js.map +0 -1
- package/dist/cli/utils/vercelDeploy.d.ts +0 -2
- package/dist/cli/utils/vercelDeploy.d.ts.map +0 -1
- package/dist/cli/utils/vercelDeploy.js +0 -21
- package/dist/cli/utils/vercelDeploy.js.map +0 -1
- package/dist/cli/utils/vercelLoginCheck.d.ts +0 -2
- package/dist/cli/utils/vercelLoginCheck.d.ts.map +0 -1
- package/dist/cli/utils/vercelLoginCheck.js +0 -42
- package/dist/cli/utils/vercelLoginCheck.js.map +0 -1
- package/dist/fetchSurvey/internalTypes.d.ts +0 -60
- package/dist/fetchSurvey/internalTypes.d.ts.map +0 -1
- package/dist/fetchSurvey/internalTypes.js +0 -3
- package/dist/fetchSurvey/internalTypes.js.map +0 -1
- package/dist/fetchSurvey/logger/fetchLogger.d.ts +0 -6
- package/dist/fetchSurvey/logger/fetchLogger.d.ts.map +0 -1
- package/dist/fetchSurvey/logger/fetchLogger.js +0 -37
- package/dist/fetchSurvey/logger/fetchLogger.js.map +0 -1
- package/dist/fetchSurvey/logger/mapperLogger.d.ts +0 -4
- package/dist/fetchSurvey/logger/mapperLogger.d.ts.map +0 -1
- package/dist/fetchSurvey/logger/mapperLogger.js +0 -16
- package/dist/fetchSurvey/logger/mapperLogger.js.map +0 -1
- package/dist/fetchSurvey/telemetry/fetchTelemetry.d.ts +0 -3
- package/dist/fetchSurvey/telemetry/fetchTelemetry.d.ts.map +0 -1
- package/dist/fetchSurvey/telemetry/fetchTelemetry.js +0 -29
- package/dist/fetchSurvey/telemetry/fetchTelemetry.js.map +0 -1
- package/dist/fetchSurvey/types.d.ts +0 -54
- package/dist/fetchSurvey/types.d.ts.map +0 -1
- package/dist/fetchSurvey/types.js +0 -3
- package/dist/fetchSurvey/types.js.map +0 -1
- package/dist/fetchSurvey/useFetchSurvey.d.ts +0 -25
- package/dist/fetchSurvey/useFetchSurvey.d.ts.map +0 -1
- package/dist/fetchSurvey/useFetchSurvey.js +0 -115
- package/dist/fetchSurvey/useFetchSurvey.js.map +0 -1
- package/dist/fetchSurvey/utils/cleaner.d.ts +0 -7
- package/dist/fetchSurvey/utils/cleaner.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/cleaner.js +0 -35
- package/dist/fetchSurvey/utils/cleaner.js.map +0 -1
- package/dist/fetchSurvey/utils/constants.d.ts +0 -10
- package/dist/fetchSurvey/utils/constants.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/constants.js +0 -13
- package/dist/fetchSurvey/utils/constants.js.map +0 -1
- package/dist/fetchSurvey/utils/extractSurveyLanguages.d.ts +0 -17
- package/dist/fetchSurvey/utils/extractSurveyLanguages.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/extractSurveyLanguages.js +0 -61
- package/dist/fetchSurvey/utils/extractSurveyLanguages.js.map +0 -1
- package/dist/fetchSurvey/utils/index.d.ts +0 -6
- package/dist/fetchSurvey/utils/index.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/index.js +0 -22
- package/dist/fetchSurvey/utils/index.js.map +0 -1
- package/dist/fetchSurvey/utils/mapSurveyPages.d.ts +0 -12
- package/dist/fetchSurvey/utils/mapSurveyPages.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/mapSurveyPages.js +0 -30
- package/dist/fetchSurvey/utils/mapSurveyPages.js.map +0 -1
- package/dist/fetchSurvey/utils/mappers/index.d.ts +0 -3
- package/dist/fetchSurvey/utils/mappers/index.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/mappers/index.js +0 -19
- package/dist/fetchSurvey/utils/mappers/index.js.map +0 -1
- package/dist/fetchSurvey/utils/mappers/questionMapper.d.ts +0 -42
- package/dist/fetchSurvey/utils/mappers/questionMapper.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/mappers/questionMapper.js +0 -183
- package/dist/fetchSurvey/utils/mappers/questionMapper.js.map +0 -1
- package/dist/fetchSurvey/utils/mappers/questionMapper.test.d.ts +0 -2
- package/dist/fetchSurvey/utils/mappers/questionMapper.test.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/mappers/questionMapper.test.js +0 -79
- package/dist/fetchSurvey/utils/mappers/questionMapper.test.js.map +0 -1
- package/dist/fetchSurvey/utils/mappers/surveyMapper.d.ts +0 -36
- package/dist/fetchSurvey/utils/mappers/surveyMapper.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/mappers/surveyMapper.js +0 -65
- package/dist/fetchSurvey/utils/mappers/surveyMapper.js.map +0 -1
- package/dist/fetchSurvey/utils/url.d.ts +0 -14
- package/dist/fetchSurvey/utils/url.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/url.js +0 -26
- package/dist/fetchSurvey/utils/url.js.map +0 -1
- package/dist/fetchSurvey/utils/validation.d.ts +0 -15
- package/dist/fetchSurvey/utils/validation.d.ts.map +0 -1
- package/dist/fetchSurvey/utils/validation.js +0 -36
- package/dist/fetchSurvey/utils/validation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/logger.d.ts +0 -26
- package/dist/logger/logger.d.ts.map +0 -1
- package/dist/logger/logger.js +0 -57
- package/dist/logger/logger.js.map +0 -1
- package/dist/queryClient.d.ts +0 -3
- package/dist/queryClient.d.ts.map +0 -1
- package/dist/queryClient.js +0 -64
- package/dist/queryClient.js.map +0 -1
- package/dist/submitSurvey/logger/resolutionLogger.d.ts +0 -4
- package/dist/submitSurvey/logger/resolutionLogger.d.ts.map +0 -1
- package/dist/submitSurvey/logger/resolutionLogger.js +0 -16
- package/dist/submitSurvey/logger/resolutionLogger.js.map +0 -1
- package/dist/submitSurvey/logger/submitLogger.d.ts +0 -7
- package/dist/submitSurvey/logger/submitLogger.d.ts.map +0 -1
- package/dist/submitSurvey/logger/submitLogger.js +0 -43
- package/dist/submitSurvey/logger/submitLogger.js.map +0 -1
- package/dist/submitSurvey/telemetry/submitTelemetry.d.ts +0 -3
- package/dist/submitSurvey/telemetry/submitTelemetry.d.ts.map +0 -1
- package/dist/submitSurvey/telemetry/submitTelemetry.js +0 -30
- package/dist/submitSurvey/telemetry/submitTelemetry.js.map +0 -1
- package/dist/submitSurvey/types.d.ts +0 -37
- package/dist/submitSurvey/types.d.ts.map +0 -1
- package/dist/submitSurvey/types.js +0 -3
- package/dist/submitSurvey/types.js.map +0 -1
- package/dist/submitSurvey/useSubmitResponse.d.ts +0 -18
- package/dist/submitSurvey/useSubmitResponse.d.ts.map +0 -1
- package/dist/submitSurvey/useSubmitResponse.js +0 -101
- package/dist/submitSurvey/useSubmitResponse.js.map +0 -1
- package/dist/submitSurvey/useSurveyPagination.d.ts +0 -0
- package/dist/submitSurvey/useSurveyPagination.js +0 -1
- package/dist/submitSurvey/utils/constants.d.ts +0 -5
- package/dist/submitSurvey/utils/constants.d.ts.map +0 -1
- package/dist/submitSurvey/utils/constants.js +0 -8
- package/dist/submitSurvey/utils/constants.js.map +0 -1
- package/dist/submitSurvey/utils/formatters.d.ts +0 -12
- package/dist/submitSurvey/utils/formatters.d.ts.map +0 -1
- package/dist/submitSurvey/utils/formatters.js +0 -29
- package/dist/submitSurvey/utils/formatters.js.map +0 -1
- package/dist/submitSurvey/utils/index.d.ts +0 -5
- package/dist/submitSurvey/utils/index.d.ts.map +0 -1
- package/dist/submitSurvey/utils/index.js +0 -21
- package/dist/submitSurvey/utils/index.js.map +0 -1
- package/dist/submitSurvey/utils/url.d.ts +0 -9
- package/dist/submitSurvey/utils/url.d.ts.map +0 -1
- package/dist/submitSurvey/utils/url.js +0 -20
- package/dist/submitSurvey/utils/url.js.map +0 -1
- package/dist/submitSurvey/utils/validation.d.ts +0 -20
- package/dist/submitSurvey/utils/validation.d.ts.map +0 -1
- package/dist/submitSurvey/utils/validation.js +0 -43
- package/dist/submitSurvey/utils/validation.js.map +0 -1
- package/dist/surveyPagination/actions/index.d.ts +0 -5
- package/dist/surveyPagination/actions/index.d.ts.map +0 -1
- package/dist/surveyPagination/actions/index.js +0 -12
- package/dist/surveyPagination/actions/index.js.map +0 -1
- package/dist/surveyPagination/actions/useOnBack.d.ts +0 -3
- package/dist/surveyPagination/actions/useOnBack.d.ts.map +0 -1
- package/dist/surveyPagination/actions/useOnBack.js +0 -33
- package/dist/surveyPagination/actions/useOnBack.js.map +0 -1
- package/dist/surveyPagination/actions/useOnChange.d.ts +0 -3
- package/dist/surveyPagination/actions/useOnChange.d.ts.map +0 -1
- package/dist/surveyPagination/actions/useOnChange.js +0 -14
- package/dist/surveyPagination/actions/useOnChange.js.map +0 -1
- package/dist/surveyPagination/actions/useOnNext.d.ts +0 -3
- package/dist/surveyPagination/actions/useOnNext.d.ts.map +0 -1
- package/dist/surveyPagination/actions/useOnNext.js +0 -82
- package/dist/surveyPagination/actions/useOnNext.js.map +0 -1
- package/dist/surveyPagination/actions/useOnSubmit.d.ts +0 -3
- package/dist/surveyPagination/actions/useOnSubmit.d.ts.map +0 -1
- package/dist/surveyPagination/actions/useOnSubmit.js +0 -102
- package/dist/surveyPagination/actions/useOnSubmit.js.map +0 -1
- package/dist/surveyPagination/dispatchers/index.d.ts +0 -4
- package/dist/surveyPagination/dispatchers/index.d.ts.map +0 -1
- package/dist/surveyPagination/dispatchers/index.js +0 -10
- package/dist/surveyPagination/dispatchers/index.js.map +0 -1
- package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.d.ts +0 -6
- package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.d.ts.map +0 -1
- package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.js +0 -28
- package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.js.map +0 -1
- package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.d.ts +0 -4
- package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.d.ts.map +0 -1
- package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.js +0 -19
- package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.js.map +0 -1
- package/dist/surveyPagination/dispatchers/useTrackPageTime.d.ts +0 -4
- package/dist/surveyPagination/dispatchers/useTrackPageTime.d.ts.map +0 -1
- package/dist/surveyPagination/dispatchers/useTrackPageTime.js +0 -12
- package/dist/surveyPagination/dispatchers/useTrackPageTime.js.map +0 -1
- package/dist/surveyPagination/effects/index.d.ts +0 -3
- package/dist/surveyPagination/effects/index.d.ts.map +0 -1
- package/dist/surveyPagination/effects/index.js +0 -8
- package/dist/surveyPagination/effects/index.js.map +0 -1
- package/dist/surveyPagination/effects/useResetPageStartTime.d.ts +0 -3
- package/dist/surveyPagination/effects/useResetPageStartTime.d.ts.map +0 -1
- package/dist/surveyPagination/effects/useResetPageStartTime.js +0 -11
- package/dist/surveyPagination/effects/useResetPageStartTime.js.map +0 -1
- package/dist/surveyPagination/effects/useSessionUnmountSummary.d.ts +0 -2
- package/dist/surveyPagination/effects/useSessionUnmountSummary.d.ts.map +0 -1
- package/dist/surveyPagination/effects/useSessionUnmountSummary.js +0 -32
- package/dist/surveyPagination/effects/useSessionUnmountSummary.js.map +0 -1
- package/dist/surveyPagination/effects/useTrackMaxVisitedPage.d.ts +0 -3
- package/dist/surveyPagination/effects/useTrackMaxVisitedPage.d.ts.map +0 -1
- package/dist/surveyPagination/effects/useTrackMaxVisitedPage.js +0 -13
- package/dist/surveyPagination/effects/useTrackMaxVisitedPage.js.map +0 -1
- package/dist/surveyPagination/effects/useUpdateAnalyticsContext.d.ts +0 -2
- package/dist/surveyPagination/effects/useUpdateAnalyticsContext.d.ts.map +0 -1
- package/dist/surveyPagination/effects/useUpdateAnalyticsContext.js +0 -15
- package/dist/surveyPagination/effects/useUpdateAnalyticsContext.js.map +0 -1
- package/dist/surveyPagination/logger/navigationLogger.d.ts +0 -7
- package/dist/surveyPagination/logger/navigationLogger.d.ts.map +0 -1
- package/dist/surveyPagination/logger/navigationLogger.js +0 -28
- package/dist/surveyPagination/logger/navigationLogger.js.map +0 -1
- package/dist/surveyPagination/logger/validationLogger.d.ts +0 -5
- package/dist/surveyPagination/logger/validationLogger.d.ts.map +0 -1
- package/dist/surveyPagination/logger/validationLogger.js +0 -20
- package/dist/surveyPagination/logger/validationLogger.js.map +0 -1
- package/dist/surveyPagination/telemetry/pageTelemetry.d.ts +0 -3
- package/dist/surveyPagination/telemetry/pageTelemetry.d.ts.map +0 -1
- package/dist/surveyPagination/telemetry/pageTelemetry.js +0 -25
- package/dist/surveyPagination/telemetry/pageTelemetry.js.map +0 -1
- package/dist/surveyPagination/telemetry/sessionTelemetry.d.ts +0 -8
- package/dist/surveyPagination/telemetry/sessionTelemetry.d.ts.map +0 -1
- package/dist/surveyPagination/telemetry/sessionTelemetry.js +0 -43
- package/dist/surveyPagination/telemetry/sessionTelemetry.js.map +0 -1
- package/dist/surveyPagination/types.d.ts +0 -43
- package/dist/surveyPagination/types.d.ts.map +0 -1
- package/dist/surveyPagination/types.js +0 -3
- package/dist/surveyPagination/types.js.map +0 -1
- package/dist/surveyPagination/useSurveyPagination.d.ts +0 -28
- package/dist/surveyPagination/useSurveyPagination.d.ts.map +0 -1
- package/dist/surveyPagination/useSurveyPagination.js +0 -93
- package/dist/surveyPagination/useSurveyPagination.js.map +0 -1
- package/dist/surveyPagination/utils/index.d.ts +0 -3
- package/dist/surveyPagination/utils/index.d.ts.map +0 -1
- package/dist/surveyPagination/utils/index.js +0 -19
- package/dist/surveyPagination/utils/index.js.map +0 -1
- package/dist/surveyPagination/utils/scroll.d.ts +0 -25
- package/dist/surveyPagination/utils/scroll.d.ts.map +0 -1
- package/dist/surveyPagination/utils/scroll.js +0 -67
- package/dist/surveyPagination/utils/scroll.js.map +0 -1
- package/dist/surveyPagination/utils/validation.d.ts +0 -24
- package/dist/surveyPagination/utils/validation.d.ts.map +0 -1
- package/dist/surveyPagination/utils/validation.js +0 -53
- package/dist/surveyPagination/utils/validation.js.map +0 -1
- package/dist/surveyProgress/useSurveyProgress.d.ts +0 -21
- package/dist/surveyProgress/useSurveyProgress.d.ts.map +0 -1
- package/dist/surveyProgress/useSurveyProgress.js +0 -34
- package/dist/surveyProgress/useSurveyProgress.js.map +0 -1
- package/dist/surveyProgress/utils/index.d.ts +0 -2
- package/dist/surveyProgress/utils/index.d.ts.map +0 -1
- package/dist/surveyProgress/utils/index.js +0 -18
- package/dist/surveyProgress/utils/index.js.map +0 -1
- package/dist/surveyProgress/utils/progress.d.ts +0 -27
- package/dist/surveyProgress/utils/progress.d.ts.map +0 -1
- package/dist/surveyProgress/utils/progress.js +0 -60
- package/dist/surveyProgress/utils/progress.js.map +0 -1
- package/dist/surveySDK/constants.d.ts +0 -10
- package/dist/surveySDK/constants.d.ts.map +0 -1
- package/dist/surveySDK/constants.js +0 -14
- package/dist/surveySDK/constants.js.map +0 -1
- package/dist/surveySDK/types.d.ts +0 -29
- package/dist/surveySDK/types.d.ts.map +0 -1
- package/dist/surveySDK/types.js +0 -3
- package/dist/surveySDK/types.js.map +0 -1
- package/dist/surveySDK/useSurveySDK.d.ts +0 -32
- package/dist/surveySDK/useSurveySDK.d.ts.map +0 -1
- package/dist/surveySDK/useSurveySDK.js +0 -86
- package/dist/surveySDK/useSurveySDK.js.map +0 -1
- package/dist/useFetchSurvey.d.ts +0 -73
- package/dist/useFetchSurvey.d.ts.map +0 -1
- package/dist/useFetchSurvey.js +0 -202
- package/dist/useFetchSurvey.js.map +0 -1
- package/dist/useSubmitResponse.d.ts +0 -40
- package/dist/useSubmitResponse.d.ts.map +0 -1
- package/dist/useSubmitResponse.js +0 -146
- package/dist/useSubmitResponse.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
main();
|
|
41
|
-
//# sourceMappingURL=index.js.map
|
|
2
|
+
"use strict";var M=Object.create;var N=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var B=(o,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of z(n))!Q.call(o,r)&&r!==t&&N(o,r,{get:()=>n[r],enumerable:!(s=W(n,r))||s.enumerable});return o};var w=(o,n,t)=>(t=o!=null?M(K(o)):{},B(n||!o||!o.__esModule?N(t,"default",{value:o,enumerable:!0}):t,o));var e={reset:"\x1B[0m",bold:"\x1B[1m",green:"\x1B[32m",red:"\x1B[31m",cyan:"\x1B[36m",yellow:"\x1B[33m",dim:"\x1B[2m"};var $=require("child_process");function f(o){try{let n=process.platform==="win32"?`where ${o}`:`command -v ${o}`;return(0,$.execSync)(n,{stdio:"ignore"}),!0}catch{return!1}}function h(o,n){try{let t=`${o} ${n.join(" ")}`;return(0,$.execSync)(t,{stdio:"inherit",shell:!0}),!0}catch{return!1}}function v(o,n){return new Promise(t=>{(0,$.spawn)(o,n,{stdio:"inherit",shell:!0}).on("close",r=>{t(r)})})}var V=w(require("readline/promises")),b=require("process");async function y(o){let n=V.default.createInterface({input:b.stdin,output:b.stdout});try{return(await n.question(o)).trim()}finally{n.close()}}async function I(){let o=parseInt(process.version.slice(1).split(".")[0],10);if(console.log(`${e.dim}Step 1/4: Checking Node.js version (current: ${process.version})...${e.reset}`),o<18){console.log(`\u26A0\uFE0F ${e.yellow}Outdated Node.js version detected. v18.0.0 or higher is required.${e.reset}`),console.log(`${e.dim}Note: If you already have a higher version installed via nvm, please run 'nvm use <version>' first.${e.reset}
|
|
3
|
+
`);let n=await y("Would you like to install/upgrade Node.js v18+ automatically? (y/N): ");n.toLowerCase()==="y"||n.toLowerCase()==="yes"||(console.log(`
|
|
4
|
+
\u274C ${e.red}Aborted. Please manually upgrade Node.js to v18+ and try again.${e.reset}
|
|
5
|
+
`),process.exit(1));let s=process.platform==="win32",r=process.platform==="darwin";s?f("winget")?(console.log(`
|
|
6
|
+
\u{1F4E6} ${e.green}winget package manager found! Installing Node.js v18+ in background...${e.reset}`),h("winget",["upgrade","OpenJS.NodeJS","--silent","--accept-package-agreements","--accept-source-agreements"])?(console.log(`
|
|
7
|
+
\u2714 ${e.green}Node.js installation triggered successfully. Please restart your terminal/command-prompt for changes to take effect.${e.reset}
|
|
8
|
+
`),process.exit(0)):(console.log(`
|
|
9
|
+
\u274C ${e.red}winget update failed. Please update Node.js manually at https://nodejs.org/${e.reset}
|
|
10
|
+
`),process.exit(1))):(console.log(`
|
|
11
|
+
\u274C ${e.red}winget package manager is not installed on this system.${e.reset}`),console.log(`${e.bold}\u{1F449} To proceed, please either:${e.reset}`),console.log(" 1. Install winget (App Installer) from the Microsoft Store."),console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/
|
|
12
|
+
`),process.exit(1)):r?f("brew")?(console.log(`
|
|
13
|
+
\u{1F4E6} ${e.green}Homebrew package manager found! Installing Node.js v18+ in background...${e.reset}`),h("brew",["install","node"])?console.log(`
|
|
14
|
+
\u2714 ${e.green}Node.js installed successfully via Homebrew.${e.reset}
|
|
15
|
+
`):(console.log(`
|
|
16
|
+
\u274C ${e.red}Homebrew installation failed. Please install Node.js manually at https://nodejs.org/${e.reset}
|
|
17
|
+
`),process.exit(1))):(console.log(`
|
|
18
|
+
\u274C ${e.red}Homebrew package manager (brew) is not installed on this system.${e.reset}`),console.log(`${e.bold}\u{1F449} To proceed, please either:${e.reset}`),console.log(" 1. Install Homebrew by running the following command in your terminal:"),console.log(` ${e.cyan}/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"${e.reset}`),console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/
|
|
19
|
+
`),process.exit(1)):(console.log(`
|
|
20
|
+
\u274C ${e.red}Please install or update Node.js to v18+ using your system's package manager.${e.reset}
|
|
21
|
+
`),process.exit(1))}else console.log(`\u2714 ${e.green}Node.js version (v${o}) is sufficient.${e.reset}`)}async function P(){console.log(`
|
|
22
|
+
${e.dim}Step 2/4: Checking Vercel CLI...${e.reset}`);let o="vercel",n=!1;if(f("vercel"))console.log(`\u2714 ${e.green}Vercel CLI is installed!${e.reset}`);else{console.log(`\u2753 ${e.yellow}Vercel CLI was not found on your system.${e.reset}`);let t=await y("\u{1F449} Would you like to install Vercel CLI globally? (Y/n): ");t.toLowerCase()==="y"||t===""?(console.log(`
|
|
23
|
+
\u{1F4E5} ${e.cyan}Installing Vercel CLI globally... (npm install -g vercel)${e.reset}`),h("npm",["install","-g","vercel"])&&f("vercel")?console.log(`\u2714 ${e.green}Vercel CLI installed successfully!${e.reset}`):(console.log(`
|
|
24
|
+
\u26A0\uFE0F ${e.yellow}Global installation failed or permissions restricted.${e.reset}`),console.log(`\u2139 ${e.dim}Falling back: Running Vercel dynamically via npx.${e.reset}`),o="npx --yes vercel",n=!0)):(console.log(`\u2139 ${e.dim}Skipping global installation. Running Vercel dynamically via npx.${e.reset}`),o="npx --yes vercel",n=!0)}return{vercelCmd:o,useNpx:n}}var L=require("child_process");async function E(o){console.log(`
|
|
25
|
+
${e.dim}Step 3/4: Checking Vercel Login...${e.reset}`);let n=!!process.env.VERCEL_TOKEN,t=!1;if(n)console.log(`\u2714 ${e.green}VERCEL_TOKEN environment variable detected. Skipping login check.${e.reset}`),t=!0;else try{(0,L.execSync)(o?"npx --yes vercel whoami":"vercel whoami",{stdio:"ignore",shell:!0}),t=!0,console.log(`\u2714 ${e.green}Logged in!${e.reset}`)}catch{t=!1}if(!t){console.log(`\u{1F511} ${e.yellow}Not logged in to Vercel.${e.reset}`),await y("\u{1F449} Press [Enter] to login to Vercel... ");let s=["login"],r=o?"npx":"vercel",u=o?["--yes","vercel",...s]:s;if(await v(r,u)!==0)throw new Error("Vercel login failed or was aborted.");console.log(`
|
|
26
|
+
\u2714 ${e.green}Logged in successfully!${e.reset}`)}return n}async function T(o,n){console.log(`
|
|
27
|
+
${e.dim}Step 4/4: Deploying project to production...${e.reset}`);let t=["--prod","--yes"];n&&t.push("--token",process.env.VERCEL_TOKEN);let s=o?"npx":"vercel",r=o?["--yes","vercel",...t]:t;if(console.log(`${e.cyan}\u26A1 Running deployment in: ${process.cwd()}${e.reset}
|
|
28
|
+
`),await v(s,r)!==0)throw new Error("Vercel deployment failed.");console.log(`
|
|
29
|
+
${e.bold}${e.green}\u{1F389} Deployment completed successfully!${e.reset}
|
|
30
|
+
`)}async function D(){console.log(`
|
|
31
|
+
${e.bold}${e.cyan}\u{1F680} Starting CFM Vercel Deployment...${e.reset}
|
|
32
|
+
`),await I();let{vercelCmd:o,useNpx:n}=await P(),t=await E(n);await T(n,t)}var C=w(require("http")),m=w(require("fs")),c=w(require("path"));var a=e;function H(o){return new Promise((n,t)=>{let s=C.createServer();s.listen(o,()=>{s.close(()=>n(o))}),s.on("error",()=>{n(H(o+1))})})}function O(o){return new Promise((n,t)=>{let s="";o.on("data",r=>s+=r),o.on("end",()=>n(s)),o.on("error",t)})}function G(o){let{exec:n}=require("child_process"),t=process.platform==="darwin"?`open "${o}"`:process.platform==="win32"?`start "" "${o}"`:`xdg-open "${o}"`;n(t)}async function A(){let o=process.env.INIT_CWD||process.cwd(),n=c.join(o,"public"),t=c.join(o,"survey-config.json"),s=c.join(__dirname,"..","..","templates"),r=await H(4200);return new Promise((u,k)=>{let x=C.createServer(async(l,i)=>{try{if(l.method==="GET"&&(l.url==="/"||l.url==="/index.html")){let p=c.join(s,"wizard.html"),d=m.readFileSync(p,"utf8");i.writeHead(200,{"Content-Type":"text/html"}),i.end(d)}else if(l.method==="POST"&&l.url==="/api/upload-logo"){let p=await O(l),d=JSON.parse(p);m.existsSync(n)||m.mkdirSync(n,{recursive:!0});let R=d.base64.replace(/^data:image\/\w+;base64,/,""),J=Buffer.from(R,"base64"),S=c.extname(d.filename),F=c.basename(d.filename,S).toLowerCase().replace(/[^a-z0-9_-]/g,""),j=`logo_${Date.now()}_${F}${S||".png"}`;m.writeFileSync(c.join(n,j),J),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({fileName:j}))}else if(l.method==="POST"&&l.url==="/api/save-config"){let p=await O(l),d=JSON.parse(p);d.configuredAt=new Date().toISOString(),m.writeFileSync(t,JSON.stringify(d,null,2),"utf8"),console.log(`
|
|
33
|
+
${a.green}\u2705 Configuration saved to ${t}${a.reset}`),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({ok:!0})),setTimeout(()=>{x.close(()=>u())},500)}else i.writeHead(404,{"Content-Type":"text/plain"}),i.end("Not found")}catch(p){i.writeHead(500,{"Content-Type":"text/plain"}),i.end(`Server error: ${p.message}`)}});x.listen(r,()=>{let l=`http://localhost:${r}`;console.log(`
|
|
34
|
+
${a.bold}${a.cyan}\u{1F680} Survey Setup Wizard${a.reset}`),console.log(`${a.dim} Running at ${a.reset}${a.green}${l}${a.reset}
|
|
35
|
+
`),G(l)}),x.on("error",k)})}var g=e,U=process.argv.slice(2),_=U[0];async function Y(){if(_==="init")try{await A()}catch(o){console.error(`
|
|
36
|
+
${g.red}\u274C Error: ${o.message||o}${g.reset}`),process.exit(1)}else if(_==="deploy")try{await D()}catch(o){console.error(`
|
|
37
|
+
${g.red}\u274C Error: ${o.message||o}${g.reset}`),process.exit(1)}else console.log(`
|
|
38
|
+
${g.bold}${g.cyan}CFM SDK CLI Tool${g.reset}`),console.log(`
|
|
39
|
+
Usage:`),console.log(" npx cfm-sdk init \u2013 Launch the survey setup wizard"),console.log(" npx cfm-sdk deploy \u2013 Deploy the current project to Vercel"),process.exit(0)}Y();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var A=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var e={reset:"\x1B[0m",bold:"\x1B[1m",green:"\x1B[32m",red:"\x1B[31m",cyan:"\x1B[36m",yellow:"\x1B[33m",dim:"\x1B[2m"};import{execSync as k,spawn as _}from"child_process";function f(o){try{let n=process.platform==="win32"?`where ${o}`:`command -v ${o}`;return k(n,{stdio:"ignore"}),!0}catch{return!1}}function $(o,n){try{let t=`${o} ${n.join(" ")}`;return k(t,{stdio:"inherit",shell:!0}),!0}catch{return!1}}function h(o,n){return new Promise(t=>{_(o,n,{stdio:"inherit",shell:!0}).on("close",r=>{t(r)})})}import R from"readline/promises";import{stdin as J,stdout as F}from"process";async function y(o){let n=R.createInterface({input:J,output:F});try{return(await n.question(o)).trim()}finally{n.close()}}async function S(){let o=parseInt(process.version.slice(1).split(".")[0],10);if(console.log(`${e.dim}Step 1/4: Checking Node.js version (current: ${process.version})...${e.reset}`),o<18){console.log(`\u26A0\uFE0F ${e.yellow}Outdated Node.js version detected. v18.0.0 or higher is required.${e.reset}`),console.log(`${e.dim}Note: If you already have a higher version installed via nvm, please run 'nvm use <version>' first.${e.reset}
|
|
3
|
+
`);let n=await y("Would you like to install/upgrade Node.js v18+ automatically? (y/N): ");n.toLowerCase()==="y"||n.toLowerCase()==="yes"||(console.log(`
|
|
4
|
+
\u274C ${e.red}Aborted. Please manually upgrade Node.js to v18+ and try again.${e.reset}
|
|
5
|
+
`),process.exit(1));let s=process.platform==="win32",r=process.platform==="darwin";s?f("winget")?(console.log(`
|
|
6
|
+
\u{1F4E6} ${e.green}winget package manager found! Installing Node.js v18+ in background...${e.reset}`),$("winget",["upgrade","OpenJS.NodeJS","--silent","--accept-package-agreements","--accept-source-agreements"])?(console.log(`
|
|
7
|
+
\u2714 ${e.green}Node.js installation triggered successfully. Please restart your terminal/command-prompt for changes to take effect.${e.reset}
|
|
8
|
+
`),process.exit(0)):(console.log(`
|
|
9
|
+
\u274C ${e.red}winget update failed. Please update Node.js manually at https://nodejs.org/${e.reset}
|
|
10
|
+
`),process.exit(1))):(console.log(`
|
|
11
|
+
\u274C ${e.red}winget package manager is not installed on this system.${e.reset}`),console.log(`${e.bold}\u{1F449} To proceed, please either:${e.reset}`),console.log(" 1. Install winget (App Installer) from the Microsoft Store."),console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/
|
|
12
|
+
`),process.exit(1)):r?f("brew")?(console.log(`
|
|
13
|
+
\u{1F4E6} ${e.green}Homebrew package manager found! Installing Node.js v18+ in background...${e.reset}`),$("brew",["install","node"])?console.log(`
|
|
14
|
+
\u2714 ${e.green}Node.js installed successfully via Homebrew.${e.reset}
|
|
15
|
+
`):(console.log(`
|
|
16
|
+
\u274C ${e.red}Homebrew installation failed. Please install Node.js manually at https://nodejs.org/${e.reset}
|
|
17
|
+
`),process.exit(1))):(console.log(`
|
|
18
|
+
\u274C ${e.red}Homebrew package manager (brew) is not installed on this system.${e.reset}`),console.log(`${e.bold}\u{1F449} To proceed, please either:${e.reset}`),console.log(" 1. Install Homebrew by running the following command in your terminal:"),console.log(` ${e.cyan}/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"${e.reset}`),console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/
|
|
19
|
+
`),process.exit(1)):(console.log(`
|
|
20
|
+
\u274C ${e.red}Please install or update Node.js to v18+ using your system's package manager.${e.reset}
|
|
21
|
+
`),process.exit(1))}else console.log(`\u2714 ${e.green}Node.js version (v${o}) is sufficient.${e.reset}`)}async function j(){console.log(`
|
|
22
|
+
${e.dim}Step 2/4: Checking Vercel CLI...${e.reset}`);let o="vercel",n=!1;if(f("vercel"))console.log(`\u2714 ${e.green}Vercel CLI is installed!${e.reset}`);else{console.log(`\u2753 ${e.yellow}Vercel CLI was not found on your system.${e.reset}`);let t=await y("\u{1F449} Would you like to install Vercel CLI globally? (Y/n): ");t.toLowerCase()==="y"||t===""?(console.log(`
|
|
23
|
+
\u{1F4E5} ${e.cyan}Installing Vercel CLI globally... (npm install -g vercel)${e.reset}`),$("npm",["install","-g","vercel"])&&f("vercel")?console.log(`\u2714 ${e.green}Vercel CLI installed successfully!${e.reset}`):(console.log(`
|
|
24
|
+
\u26A0\uFE0F ${e.yellow}Global installation failed or permissions restricted.${e.reset}`),console.log(`\u2139 ${e.dim}Falling back: Running Vercel dynamically via npx.${e.reset}`),o="npx --yes vercel",n=!0)):(console.log(`\u2139 ${e.dim}Skipping global installation. Running Vercel dynamically via npx.${e.reset}`),o="npx --yes vercel",n=!0)}return{vercelCmd:o,useNpx:n}}import{execSync as M}from"child_process";async function N(o){console.log(`
|
|
25
|
+
${e.dim}Step 3/4: Checking Vercel Login...${e.reset}`);let n=!!process.env.VERCEL_TOKEN,t=!1;if(n)console.log(`\u2714 ${e.green}VERCEL_TOKEN environment variable detected. Skipping login check.${e.reset}`),t=!0;else try{M(o?"npx --yes vercel whoami":"vercel whoami",{stdio:"ignore",shell:!0}),t=!0,console.log(`\u2714 ${e.green}Logged in!${e.reset}`)}catch{t=!1}if(!t){console.log(`\u{1F511} ${e.yellow}Not logged in to Vercel.${e.reset}`),await y("\u{1F449} Press [Enter] to login to Vercel... ");let s=["login"],r=o?"npx":"vercel",u=o?["--yes","vercel",...s]:s;if(await h(r,u)!==0)throw new Error("Vercel login failed or was aborted.");console.log(`
|
|
26
|
+
\u2714 ${e.green}Logged in successfully!${e.reset}`)}return n}async function V(o,n){console.log(`
|
|
27
|
+
${e.dim}Step 4/4: Deploying project to production...${e.reset}`);let t=["--prod","--yes"];n&&t.push("--token",process.env.VERCEL_TOKEN);let s=o?"npx":"vercel",r=o?["--yes","vercel",...t]:t;if(console.log(`${e.cyan}\u26A1 Running deployment in: ${process.cwd()}${e.reset}
|
|
28
|
+
`),await h(s,r)!==0)throw new Error("Vercel deployment failed.");console.log(`
|
|
29
|
+
${e.bold}${e.green}\u{1F389} Deployment completed successfully!${e.reset}
|
|
30
|
+
`)}async function I(){console.log(`
|
|
31
|
+
${e.bold}${e.cyan}\u{1F680} Starting CFM Vercel Deployment...${e.reset}
|
|
32
|
+
`),await S();let{vercelCmd:o,useNpx:n}=await j(),t=await N(n);await V(n,t)}import*as v from"http";import*as m from"fs";import*as c from"path";var a=e;function L(o){return new Promise((n,t)=>{let s=v.createServer();s.listen(o,()=>{s.close(()=>n(o))}),s.on("error",()=>{n(L(o+1))})})}function P(o){return new Promise((n,t)=>{let s="";o.on("data",r=>s+=r),o.on("end",()=>n(s)),o.on("error",t)})}function W(o){let{exec:n}=A("child_process"),t=process.platform==="darwin"?`open "${o}"`:process.platform==="win32"?`start "" "${o}"`:`xdg-open "${o}"`;n(t)}async function E(){let o=process.env.INIT_CWD||process.cwd(),n=c.join(o,"public"),t=c.join(o,"survey-config.json"),s=c.join(__dirname,"..","..","templates"),r=await L(4200);return new Promise((u,b)=>{let w=v.createServer(async(l,i)=>{try{if(l.method==="GET"&&(l.url==="/"||l.url==="/index.html")){let p=c.join(s,"wizard.html"),d=m.readFileSync(p,"utf8");i.writeHead(200,{"Content-Type":"text/html"}),i.end(d)}else if(l.method==="POST"&&l.url==="/api/upload-logo"){let p=await P(l),d=JSON.parse(p);m.existsSync(n)||m.mkdirSync(n,{recursive:!0});let D=d.base64.replace(/^data:image\/\w+;base64,/,""),O=Buffer.from(D,"base64"),x=c.extname(d.filename),H=c.basename(d.filename,x).toLowerCase().replace(/[^a-z0-9_-]/g,""),C=`logo_${Date.now()}_${H}${x||".png"}`;m.writeFileSync(c.join(n,C),O),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({fileName:C}))}else if(l.method==="POST"&&l.url==="/api/save-config"){let p=await P(l),d=JSON.parse(p);d.configuredAt=new Date().toISOString(),m.writeFileSync(t,JSON.stringify(d,null,2),"utf8"),console.log(`
|
|
33
|
+
${a.green}\u2705 Configuration saved to ${t}${a.reset}`),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({ok:!0})),setTimeout(()=>{w.close(()=>u())},500)}else i.writeHead(404,{"Content-Type":"text/plain"}),i.end("Not found")}catch(p){i.writeHead(500,{"Content-Type":"text/plain"}),i.end(`Server error: ${p.message}`)}});w.listen(r,()=>{let l=`http://localhost:${r}`;console.log(`
|
|
34
|
+
${a.bold}${a.cyan}\u{1F680} Survey Setup Wizard${a.reset}`),console.log(`${a.dim} Running at ${a.reset}${a.green}${l}${a.reset}
|
|
35
|
+
`),W(l)}),w.on("error",b)})}var g=e,z=process.argv.slice(2),T=z[0];async function K(){if(T==="init")try{await E()}catch(o){console.error(`
|
|
36
|
+
${g.red}\u274C Error: ${o.message||o}${g.reset}`),process.exit(1)}else if(T==="deploy")try{await I()}catch(o){console.error(`
|
|
37
|
+
${g.red}\u274C Error: ${o.message||o}${g.reset}`),process.exit(1)}else console.log(`
|
|
38
|
+
${g.bold}${g.cyan}CFM SDK CLI Tool${g.reset}`),console.log(`
|
|
39
|
+
Usage:`),console.log(" npx cfm-sdk init \u2013 Launch the survey setup wizard"),console.log(" npx cfm-sdk deploy \u2013 Deploy the current project to Vercel"),process.exit(0)}K();
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types representing survey option selections (e.g., choice options in a question).
|
|
3
|
+
*/
|
|
4
|
+
type SurveyOption = {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string | number;
|
|
7
|
+
color?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Types representing a processed question from the survey.
|
|
11
|
+
*/
|
|
12
|
+
type SurveyQuestion = {
|
|
13
|
+
id: string;
|
|
14
|
+
text: string;
|
|
15
|
+
type: 'rating' | 'radio' | 'text';
|
|
16
|
+
options: SurveyOption[];
|
|
17
|
+
minLabel?: string;
|
|
18
|
+
midLabel?: string;
|
|
19
|
+
maxLabel?: string;
|
|
20
|
+
midLabelIndex?: number;
|
|
21
|
+
maxCharacterCount?: number;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
requiredErrorMessage?: string;
|
|
24
|
+
placeholder?: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Type representing a survey page.
|
|
28
|
+
*/
|
|
29
|
+
type SurveyPageData = {
|
|
30
|
+
id: string;
|
|
31
|
+
title?: string;
|
|
32
|
+
questions: SurveyQuestion[];
|
|
33
|
+
};
|
|
34
|
+
type SurveyLanguage = {
|
|
35
|
+
code: string;
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Type representing the fully parsed and normalized Survey structure.
|
|
40
|
+
*/
|
|
41
|
+
type Survey = {
|
|
42
|
+
id: string;
|
|
43
|
+
language: string;
|
|
44
|
+
languages: SurveyLanguage[];
|
|
45
|
+
pages: SurveyPageData[];
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Key-value mapping of question IDs to their selected answer values (string or number).
|
|
50
|
+
*/
|
|
51
|
+
type SubmitAnswers = Record<string, string | number>;
|
|
52
|
+
/**
|
|
53
|
+
* The final output result resolved after a successful submit response.
|
|
54
|
+
*/
|
|
55
|
+
type SubmitResult = {
|
|
56
|
+
success: boolean;
|
|
57
|
+
responseId: string;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Enum representing all action types supported by the survey SDK dispatcher.
|
|
62
|
+
*/
|
|
63
|
+
declare enum ACTIONS {
|
|
64
|
+
NEXT = "NEXT",
|
|
65
|
+
PREVIOUS = "PREVIOUS",
|
|
66
|
+
SUBMIT = "SUBMIT",
|
|
67
|
+
CHANGE = "CHANGE"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Union type representing all dispatch actions for the survey SDK.
|
|
72
|
+
*/
|
|
73
|
+
type SurveyAction = {
|
|
74
|
+
type: ACTIONS.NEXT | 'NEXT';
|
|
75
|
+
} | {
|
|
76
|
+
type: ACTIONS.PREVIOUS | 'PREVIOUS';
|
|
77
|
+
} | {
|
|
78
|
+
type: ACTIONS.SUBMIT | 'SUBMIT';
|
|
79
|
+
} | {
|
|
80
|
+
type: ACTIONS.CHANGE | 'CHANGE';
|
|
81
|
+
payload: {
|
|
82
|
+
questionId: string;
|
|
83
|
+
value: string | number;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Configuration settings for useSurveySDK hook behavior and layout parameters.
|
|
88
|
+
*/
|
|
89
|
+
type UseSurveySDKProps = {
|
|
90
|
+
options?: {
|
|
91
|
+
instanceId?: string;
|
|
92
|
+
language?: string;
|
|
93
|
+
placeholders?: Record<string, string>;
|
|
94
|
+
debug?: boolean;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The main entry-point custom React hook for the survey SDK.
|
|
100
|
+
* Handles fetching survey configurations, active session state, validation,
|
|
101
|
+
* page pagination, response submission, and user progress tracking.
|
|
102
|
+
*
|
|
103
|
+
* @param props Configuration settings for hook behavior and layout parameters.
|
|
104
|
+
* @returns Unified state structures, submission indicators, and action triggers.
|
|
105
|
+
*/
|
|
106
|
+
declare function useSurveySDK({ options }?: UseSurveySDKProps): {
|
|
107
|
+
surveyQueryResults: {
|
|
108
|
+
data: Survey | null;
|
|
109
|
+
error: Error | null;
|
|
110
|
+
isLoading: boolean;
|
|
111
|
+
};
|
|
112
|
+
submitSurveyResults: {
|
|
113
|
+
data: SubmitResult | null;
|
|
114
|
+
error: Error | null;
|
|
115
|
+
isLoading: boolean;
|
|
116
|
+
};
|
|
117
|
+
state: {
|
|
118
|
+
currentPageIndex: number;
|
|
119
|
+
currentQuestions: SurveyQuestion[];
|
|
120
|
+
values: SubmitAnswers;
|
|
121
|
+
validationErrors: Record<string, string>;
|
|
122
|
+
progressPercentage: number;
|
|
123
|
+
};
|
|
124
|
+
onAction: (action: SurveyAction) => void;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export { type SurveyLanguage, type SurveyQuestion, useSurveySDK };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,127 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Types representing survey option selections (e.g., choice options in a question).
|
|
3
|
+
*/
|
|
4
|
+
type SurveyOption = {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string | number;
|
|
7
|
+
color?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Types representing a processed question from the survey.
|
|
11
|
+
*/
|
|
12
|
+
type SurveyQuestion = {
|
|
13
|
+
id: string;
|
|
14
|
+
text: string;
|
|
15
|
+
type: 'rating' | 'radio' | 'text';
|
|
16
|
+
options: SurveyOption[];
|
|
17
|
+
minLabel?: string;
|
|
18
|
+
midLabel?: string;
|
|
19
|
+
maxLabel?: string;
|
|
20
|
+
midLabelIndex?: number;
|
|
21
|
+
maxCharacterCount?: number;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
requiredErrorMessage?: string;
|
|
24
|
+
placeholder?: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Type representing a survey page.
|
|
28
|
+
*/
|
|
29
|
+
type SurveyPageData = {
|
|
30
|
+
id: string;
|
|
31
|
+
title?: string;
|
|
32
|
+
questions: SurveyQuestion[];
|
|
33
|
+
};
|
|
34
|
+
type SurveyLanguage = {
|
|
35
|
+
code: string;
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Type representing the fully parsed and normalized Survey structure.
|
|
40
|
+
*/
|
|
41
|
+
type Survey = {
|
|
42
|
+
id: string;
|
|
43
|
+
language: string;
|
|
44
|
+
languages: SurveyLanguage[];
|
|
45
|
+
pages: SurveyPageData[];
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Key-value mapping of question IDs to their selected answer values (string or number).
|
|
50
|
+
*/
|
|
51
|
+
type SubmitAnswers = Record<string, string | number>;
|
|
52
|
+
/**
|
|
53
|
+
* The final output result resolved after a successful submit response.
|
|
54
|
+
*/
|
|
55
|
+
type SubmitResult = {
|
|
56
|
+
success: boolean;
|
|
57
|
+
responseId: string;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Enum representing all action types supported by the survey SDK dispatcher.
|
|
62
|
+
*/
|
|
63
|
+
declare enum ACTIONS {
|
|
64
|
+
NEXT = "NEXT",
|
|
65
|
+
PREVIOUS = "PREVIOUS",
|
|
66
|
+
SUBMIT = "SUBMIT",
|
|
67
|
+
CHANGE = "CHANGE"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Union type representing all dispatch actions for the survey SDK.
|
|
72
|
+
*/
|
|
73
|
+
type SurveyAction = {
|
|
74
|
+
type: ACTIONS.NEXT | 'NEXT';
|
|
75
|
+
} | {
|
|
76
|
+
type: ACTIONS.PREVIOUS | 'PREVIOUS';
|
|
77
|
+
} | {
|
|
78
|
+
type: ACTIONS.SUBMIT | 'SUBMIT';
|
|
79
|
+
} | {
|
|
80
|
+
type: ACTIONS.CHANGE | 'CHANGE';
|
|
81
|
+
payload: {
|
|
82
|
+
questionId: string;
|
|
83
|
+
value: string | number;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Configuration settings for useSurveySDK hook behavior and layout parameters.
|
|
88
|
+
*/
|
|
89
|
+
type UseSurveySDKProps = {
|
|
90
|
+
options?: {
|
|
91
|
+
instanceId?: string;
|
|
92
|
+
language?: string;
|
|
93
|
+
placeholders?: Record<string, string>;
|
|
94
|
+
debug?: boolean;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The main entry-point custom React hook for the survey SDK.
|
|
100
|
+
* Handles fetching survey configurations, active session state, validation,
|
|
101
|
+
* page pagination, response submission, and user progress tracking.
|
|
102
|
+
*
|
|
103
|
+
* @param props Configuration settings for hook behavior and layout parameters.
|
|
104
|
+
* @returns Unified state structures, submission indicators, and action triggers.
|
|
105
|
+
*/
|
|
106
|
+
declare function useSurveySDK({ options }?: UseSurveySDKProps): {
|
|
107
|
+
surveyQueryResults: {
|
|
108
|
+
data: Survey | null;
|
|
109
|
+
error: Error | null;
|
|
110
|
+
isLoading: boolean;
|
|
111
|
+
};
|
|
112
|
+
submitSurveyResults: {
|
|
113
|
+
data: SubmitResult | null;
|
|
114
|
+
error: Error | null;
|
|
115
|
+
isLoading: boolean;
|
|
116
|
+
};
|
|
117
|
+
state: {
|
|
118
|
+
currentPageIndex: number;
|
|
119
|
+
currentQuestions: SurveyQuestion[];
|
|
120
|
+
values: SubmitAnswers;
|
|
121
|
+
validationErrors: Record<string, string>;
|
|
122
|
+
progressPercentage: number;
|
|
123
|
+
};
|
|
124
|
+
onAction: (action: SurveyAction) => void;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export { type SurveyLanguage, type SurveyQuestion, useSurveySDK };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useSurveySDK = void 0;
|
|
4
|
-
var useSurveySDK_1 = require("./surveySDK/useSurveySDK");
|
|
5
|
-
Object.defineProperty(exports, "useSurveySDK", { enumerable: true, get: function () { return useSurveySDK_1.useSurveySDK; } });
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var V=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var ft=Object.getOwnPropertyNames;var dt=Object.prototype.hasOwnProperty;var yt=(e,t)=>{for(var r in t)V(e,r,{get:t[r],enumerable:!0})},St=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ft(t))!dt.call(e,i)&&i!==r&&V(e,i,{get:()=>t[i],enumerable:!(n=gt(t,i))||n.enumerable});return e};var bt=e=>St(V({},"__esModule",{value:!0}),e);var Nt={};yt(Nt,{useSurveySDK:()=>ut});module.exports=bt(Nt);var at=require("react");var de=require("react"),ye=require("@tanstack/react-query");var X=require("@tanstack/react-query");var F=!1,vt={debug:"background: #7f8c8d; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",info:"background: #2980b9; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",warn:"background: #f1c40f; color: #000; padding: 2px 5px; border-radius: 3px; font-weight: bold;",error:"background: #e74c3c; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",success:"background: #2ecc71; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",perf:"background: #9b59b6; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",analytics:"background: #e20074; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;"};function P(e,t,r){if(!F&&e!=="analytics")return;let n=new Date().toLocaleTimeString(),i=`%c[SDK:${e.toUpperCase()}]`,o=vt[e];r!==void 0?console.log(`[${n}] ${i}`,o,t,r):console.log(`[${n}] ${i}`,o,t)}var u={setEnabled:e=>{F=e},isEnabled:()=>F,debug:(e,t)=>P("debug",e,t),info:(e,t)=>P("info",e,t),warn:(e,t)=>P("warn",e,t),error:(e,t)=>P("error",e,t),success:(e,t)=>P("success",e,t),analytics:(e,t)=>P("analytics",e,t),perf:e=>{P("perf",`${e.apiName} completed in ${e.durationMs.toFixed(2)}ms | Status: ${e.status}`,e)}};var C=new X.QueryClient({defaultOptions:{queries:{staleTime:1/0,refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchInterval:!1,retryDelay:5e3,retry:(e,t)=>{if(e>=3)return u.error("Query failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("404")||r.includes("422"))return u.error(`Query failed permanently due to client error (${r}). Skipping retry.`,t),!1}return u.warn(`Query failed. Retrying attempt ${e+1}/3...`,t),!0}},mutations:{networkMode:"always",retryDelay:5e3,retry:(e,t)=>{if(e>=3)return u.error("Mutation failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("422"))return u.error("Mutation failed permanently due to validation/client error. Skipping retry.",t),!1}return u.warn(`Mutation failed. Retrying attempt ${e+1}/3...`,t),!0}}}});var Y="https://custom-p0.feedbook.me/api/feedback/survey/cfm",K="eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MgVG9rZW4gR2VuZXJhdGVkIEJ5IFNwcmlua2xyIiwic3VydmV5SWQiOiI2YTJlNWM2NDFiOGRiMmY5MDQ2Nzg4ODUiLCJpc3MiOiJTUFJJTktMUiIsInR5cCI6IkpXVCIsInN1cnZleU1vZGUiOiJTVEFOREFSRCIsInN1cnZleUF1dGhlbnRpY2F0aW9uU3RhdGUiOiJOT1RfUkVRVUlSRUQiLCJkaXN0cmlidXRpb25FbnRpdHlJZCI6IjZhMmU1ZDEzNDRjYTkzZjc3YTVlMzcyNyIsImF1ZCI6IlNQUklOS0xSIiwibmJmIjoxNzgxNDIyMTc5LCJzY29wZSI6WyJSRUFEIiwiV1JJVEUiXSwic3RhdGljU3VydmV5IjoidHJ1ZSIsInN1cnZleVJlc3BvbmRlclNuVHlwZSI6IkVYVEVSTkFMX0FQUExJQ0FUSU9OIiwic3VydmV5TGFuZ3VhZ2UiOiJlbiIsInBhcnRuZXJJZCI6OTAwNCwidG9rZW5UeXBlIjoiQUNDRVNTIiwiYXV0aFR5cGUiOiJTVVJWRVlfUkVTUE9OU0UiLCJpYXQiOjE3ODE0MjMzNzksImp0aSI6InNwcmlua2xyIn0.B4ffi1szwM_xQKXTlr0kQc9mVOS4qVbB5e6ir4NFuCoOmNmsl3PB1QeFJ5jPaQ42s0KTpbufPam9ja0Z84CJ620l2WtuS1RModEv7ZtuMNLWOixzRxZMduC5-V7WV85H6gr1e-HzX7wgqrxTk2Z9iTr-8AVuczlwScarCfqLhA-JE_EXkFScHoehmH7QB5q5-BfcxU32iQNYOk5NyeEHGAAWkkyiGPdrbE27njPnhTunB3kKgCBvHHLq0KmgoN9x_KnrB53O_0Xai419TT5vkBWlu5a_uotZckX014eQpxYH02w_LeOF8iWEKYe6R9ge-6DSbelaJSt6U6O8Fq-aXw";function xt(e){return`${Y}?instanceId=${encodeURIComponent(e)}&draftPreview=false`}function ee(e){let t=typeof e=="string"&&e.trim().length>0?e.trim():K;return xt(t)}function ht(e){let t=(e??"").toUpperCase();return t==="TEXTFIELD"?"text":t==="RATING"||t==="SCALE"||t==="RATING_MATRIX"?"rating":"radio"}var kt=["#e2001a","#e4251b","#ec610a","#f18b00","#f7b200","#fcd900","#d2dc00","#9fca00","#6bb300","#339a00","#008000"];function te(e){return kt[e]??"#e20074"}function Et(e=[],t){let r=e.filter(n=>n.additional?.isHintText&&!n.hidden).map(n=>t&&n.translations?.[t]?.answerText||n.answerText||"").filter(Boolean);return r.length>=3?{minLabel:r[0],midLabel:r[1],maxLabel:r[2]}:{minLabel:r[0],maxLabel:r[1]}}function Pt(e,t,r){if(t==="text")return[];let i=(e.answerDetails??[]).filter(o=>!o.hidden&&!o.additional?.isHintText);return i.length>0?i.map(a=>{let s=r&&a.translations?.[r]?.answerText||a.answerText||"",c=a.answerText??"",m=Number(c),p=Number.isFinite(m)&&c.trim()!==""?m:c,l={label:s,value:p};return t==="rating"&&typeof p=="number"&&(l.color=te(p)),l}):t==="rating"?Array.from({length:11},(a,s)=>({label:String(s),value:s,color:te(s)})):[]}function re(e,t,r){let n=ht(e.answerType),{minLabel:i,midLabel:o,maxLabel:a}=Et(e.answerDetails,t),s=Pt(e,n,t),c=e.id??"",m=e.questionConfigs??[],p=m.find(b=>b.key==="REQUIRED")?.value?.[0]==="true",l=m.find(b=>b.key==="REQUIRED_ERROR_MESSAGE"),v=l?.value?.[0];t&&l?.translations?.[t]?.value?.[0]&&(v=l.translations[t].value[0]);let g=m.find(b=>b.key==="CONTENT_TYPE")?.childConfigs?.find(b=>b.key==="MAX_CHARACTER_COUNT"),f=g?.value?.[0]?Number(g.value[0]):void 0,d;n==="rating"&&o&&(s.length===11?d=7.5:d=(s.length-1)/2);let x=t&&e.translations?.[t]?.questionRichText||t&&e.translations?.[t]?.questionText||e.questionRichText||e.questionText||"";r&&(x=x.replace(/\{\{(\w+)\}\}/g,(b,E)=>r[E]!==void 0?r[E]:b));let y;if(n==="text"){let b=e.answerDetails?.[0];b&&(y=t&&b.translations?.[t]?.answerText||b.answerText)}return{id:c,text:x,type:n,options:s,required:p,...v?{requiredErrorMessage:v}:{},...i?{minLabel:i}:{},...o?{midLabel:o}:{},...d!==void 0?{midLabelIndex:d}:{},...a?{maxLabel:a}:{},...f!==void 0?{maxCharacterCount:f}:{},...y?{placeholder:y}:{}}}var It={en:"English",hi:"Hindi",de:"Deutsch",es:"Espa\xF1ol",fr:"Fran\xE7ais",bn:"Bengali",gu:"Gujarati",it:"Italiano",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",mr:"Marathi",pa:"Punjabi",ta:"Tamil",te:"Telugu",ur:"Urdu",zh:"\u4E2D\u6587"};function wt(e){let t=e.toLowerCase().trim();return It[t]||e.toUpperCase()}function ne(e){let t=e.cfmSurveyDTO,r=new Set,n=t?.baseLanguage??"en";return r.add(n),t&&Array.isArray(t.surveyPages)&&t.surveyPages.forEach(i=>{(i.questionHolders??[]).forEach(o=>{let a=o.question;a&&a.translations&&Object.keys(a.translations).forEach(s=>{r.add(s)})})}),Array.from(r).map(i=>({code:i,name:wt(i)}))}function oe(e,t,r){let n=e.cfmSurveyDTO;return!n||!Array.isArray(n.surveyPages)?[]:n.surveyPages.map((i,o)=>{let a=(i.questionHolders??[]).map(s=>s.question).filter(s=>!!s).map(s=>re(s,t,r));return{id:`page_${o}`,title:`Page ${o+1}`,questions:a}})}function ie(e){return e.instanceId?.trim()?{instanceId:e.instanceId.trim(),language:e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en"}:null}function Tt(e,t){return t??e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en"}function se(e,t,r){let n=Tt(e,t),i=ne(e),o=oe(e,n,r);return{id:e.cfmSurveyDTO?.id??"",language:n,languages:i,pages:o}}function ae(e){u.info("Starting survey layout API fetch...",{url:e})}function M(e,t,r){u.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,success:!1})}function ue(e,t,r,n){u.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,payloadSize:n,success:!0})}function ce(e){u.success("Raw survey layout fetched successfully",e)}function me(e){u.error("Failed to fetch raw survey layout",e)}function pe(){u.warn("Cannot map survey: apiResponse is null or undefined")}function le(e){u.success("Mapped survey layout successfully",e)}function ge(e){u.error("Failed to map survey layout",e)}function h(e){if(e.eventName==="survey_session_summary"){let{completed:t,totalDurationMs:r,maxVisitedPageIndex:n,totalQuestionsCount:i,answeredQuestionsCount:o,skippedQuestionsCount:a,skippedQuestionIds:s,validationErrorsCount:c,backtrackCount:m}=e.metadata;u.analytics(`Event: ${e.eventName} - SESSION SUMMARY TABLE:`);let p=[{Metric:"Completion Status",Value:t?"COMPLETED \u2705":"ABANDONED \u274C"},{Metric:"Total Time Spent",Value:`${(r/1e3).toFixed(2)} seconds`},{Metric:"Max Page Index Reached",Value:`${n}`},{Metric:"Total Questions",Value:i},{Metric:"Answered Questions",Value:o},{Metric:"Skipped Optional Questions",Value:a},{Metric:"Skipped Question IDs",Value:s.join(", ")||"None"},{Metric:"Validation Errors Triggered",Value:c},{Metric:"Backtrack Count",Value:m},{Metric:"Validation Error History",Value:e.metadata.validationHistory?.map(l=>`[Page ${l.pageIndex}] Attempt ${l.attemptNumber}: ${Object.keys(l.errors).join(", ")}`).join(" | ")||"NO Validation Erros Occurred"}];console.table(p)}else u.analytics(`Event: ${e.eventName}`,e.metadata)}function fe(e,t,r,n){h({eventName:"survey_fetch_latency",metadata:{durationMs:e,status:t,success:!0,url:r,payloadSize:n}})}function Q(e,t,r){h({eventName:"api_error",metadata:{apiName:"GET Survey Layout",status:e,url:t,errorMessage:r}})}async function Rt(e){let t=performance.now();ae(e);try{let r=await fetch(e,{method:"GET",headers:{Accept:"application/json"},cache:"force-cache"}),n=performance.now()-t;if(!r.ok)throw M(n,r.status,e),Q(r.status,e,`Survey fetch failed (${r.status})`),new Error(`Survey fetch failed (${r.status})`);let i=await r.json(),o=JSON.stringify(i),s=`${(new Blob([o]).size/1024).toFixed(2)} KB`;return ue(n,r.status,e,s),fe(n,r.status,e,s),ce(i),i}catch(r){let n=performance.now()-t;throw M(n,"FAILED",e),Q("FAILED",e,r?.message||String(r)),me(r),r}}function Se(e){let t=ee(e?.instanceId),r=e?.language,n=e?.placeholders,{data:i,error:o,isLoading:a,isSuccess:s}=(0,ye.useQuery)({queryKey:["survey",t],queryFn:()=>Rt(t),enabled:!!t},C),c=(0,de.useMemo)(()=>{if(!s)return{survey:null,session:null};if(!i)return pe(),{survey:null,session:null};try{let m=se(i,r,n),p=ie(i),l=p?{...p,language:m.language}:null;return le(m),{survey:m,session:l}}catch(m){return ge(m),{survey:null,session:null}}},[i,s,r]);return{survey:c.survey,session:c.session,fetching:a,fetchError:o}}var R=require("react");var Le=require("react"),Ne=require("@tanstack/react-query");function be(e,t){u.info("Starting survey response HTTP POST...",{url:e,requestBody:t})}function ve(e,t){u.warn(e,t)}function xe(e,t,r,n,i){u.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:n,responseSize:i,success:!0})}function U(e,t,r,n){u.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:n,success:!1})}function he(e){u.success("Survey response submitted successfully",{responseId:e})}function ke(e,t){u.error(e,t)}function Ee(e){u.debug("Resolved raw inputs to submit schema:",e)}function Pe(e){u.debug("Constructed JSON request body:",e)}function Ie(e){u.error("Failed to execute submit callback",e)}function we(e,t,r,n,i){h({eventName:"survey_submit_latency",metadata:{durationMs:e,status:t,success:!0,url:r,requestSize:n,responseSize:i}})}function D(e,t,r){h({eventName:"api_error",metadata:{apiName:"POST Submit Response",status:e,url:t,errorMessage:r}})}var Te="https://custom-p0.feedbook.me/api/feedback/survey/responseV2";function Re(e,t="en"){let r=new URLSearchParams({instanceId:e,surveySubmitted:"true",surveyLanguage:t});return`${Te}?${r.toString()}`}function Ae(e,t){let r={};for(let n of t){let i=e[n.id];if(i==null)continue;let o=String(i);r[n.id]=[o]}return{questionToAnswers:r,quesIdVsAttachmentDetails:{},optionLevelAnswers:{},conjointTasks:[]}}function At(e){return typeof e=="object"&&e!==null&&"instanceId"in e&&"answers"in e}function Ce(e,t,r){if(At(e))return{...e,surveyLanguage:e.surveyLanguage??t?.language??"en",questions:e.questions??r?.pages.flatMap(n=>n.questions)??[]};if(!t?.instanceId)throw new Error("Survey session not ready. Fetch survey before submitting.");return{answers:e,instanceId:t.instanceId,surveyLanguage:t.language??"en",questions:r?.pages.flatMap(n=>n.questions)??[]}}async function Ct({url:e,requestBody:t}){let r=performance.now(),i=`${(new Blob([JSON.stringify(t)]).size/1024).toFixed(2)} KB`;be(e,t);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await o.json().catch(l=>(ve("Failed to parse JSON response during submission",l),null)),s=performance.now()-r,m=`${((a?new Blob([JSON.stringify(a)]).size:0)/1024).toFixed(2)} KB`;if(!o.ok)throw U(s,o.status,e,i),D(o.status,e,`Submit failed (${o.status}): ${JSON.stringify(a)}`),new Error(`Submit failed (${o.status}): ${JSON.stringify(a)}`);let p=a?.responseId??"";return xe(s,o.status,e,i,m),we(s,o.status,e,i,m),he(p),{success:!0,responseId:p}}catch(o){let a=performance.now()-r;throw U(a,"FAILED",e,i),D("FAILED",e,o?.message||String(o)),ke("Failed to submit survey response",o),o}}function Oe(e,t){let r=(0,Ne.useMutation)({mutationFn:({url:i,requestBody:o})=>Ct({url:i,requestBody:o})},C);return{submit:(0,Le.useCallback)(async i=>{try{let o=Ce(i,e,t);Ee(o);let a=o.surveyLanguage??"en",s=Ae(o.answers,o.questions??[]);Pe(s);let c=Re(o.instanceId,a);return await r.mutateAsync({url:c,requestBody:s})}catch(o){throw Ie(o),o}},[e,t,r]),data:r.data??null,loading:r.isPending,error:r.error}}var T=require("react");function Ve(e){return!e||!Array.isArray(e.pages)?0:e.pages.reduce((t,r)=>t+(r.questions?.length??0),0)}function Fe(e,t,r=0){if(!e||!t||!Array.isArray(e.pages))return 0;let n=0;return e.pages.forEach((i,o)=>{Array.isArray(i.questions)&&(o<r?n+=i.questions.length:i.questions.forEach(a=>{let s=t[a.id];s!=null&&s!==""&&n++}))}),n}function Me(e,t){return t<=0?0:Math.min(100,Math.max(0,Math.round(e/t*100)))}function Qe({survey:e,values:t,currentPageIndex:r=0}){let[n,i]=(0,T.useState)(0);return(0,T.useEffect)(()=>{r>n&&i(r)},[r,n]),(0,T.useMemo)(()=>{let o=Ve(e),a=Fe(e,t,n),s=Me(a,o),c=o>0&&a===o;return{totalQuestionsCount:o,answeredQuestionsCount:a,progressPercentage:s,isComplete:c}},[e,t,n])}var Ue=require("react");function B(e){let{currentPageIndex:t,paginationRefs:r}=e;(0,Ue.useEffect)(()=>{r.current&&(r.current.pageStartTime=performance.now())},[t,r])}var De=require("react");function q(e){let{currentPageIndex:t,paginationRefs:r}=e;(0,De.useEffect)(()=>{r.current&&t>r.current.maxVisitedPageIndex&&(r.current.maxVisitedPageIndex=t)},[t,r])}var He=require("react");function Be(e,t){u.info(`Answer changed for question: ${e}`,{value:t})}function I(e,t){u.warn(e,t)}function qe(){u.info("Initiating survey submission...")}function _e(e){u.info(`Navigating back from page index: ${e}`)}function Je(e){u.info(`Navigating next from page index: ${e}`)}function $e(e){u.error("Error encountered during pagination submit trigger",e)}function _(e,t,r){let n={};return e.forEach(i=>{i.required&&(t[i.id]===void 0||t[i.id]==="")&&(n[i.id]=i.requiredErrorMessage??(r?.startsWith("de")?"Beantworten Sie bitte diese Frage bevor Sie fortfahren.":"Please answer this question before you proceed."))}),n}function je(e,t,r){let n={},i="",o=-1;for(let a=0;a<e.length;a++){let s=_(e[a].questions,t,r);Object.keys(s).length>0&&(n={...n,...s},o===-1&&(o=a,i=Object.keys(s)[0]))}return o!==-1?{errors:n,errorPageIndex:o,firstErrorId:i}:null}function A(e){return typeof document>"u"?null:document.getElementById(e)||null}function Lt(e){return e.closest("main")||e.closest("form")||e.parentElement||e}function L(e,t){try{let n=e[t]?.questions?.[0];n?setTimeout(()=>{try{let i=A(n.id);i?Lt(i).scrollIntoView({behavior:"smooth",block:"start"}):window.scrollTo({top:0,behavior:"smooth"})}catch(i){I("Failed to scroll page first question into view",i)}},50):window.scrollTo({top:0,behavior:"smooth"})}catch(r){I("Failed to trigger scroll navigation",r)}}function J(e){let{currentPageIndex:t,setCurrentPageIndex:r,trackPageTime:n,pages:i,values:o,paginationRefs:a}=e;return(0,He.useCallback)(()=>{if(t>0){_e(t),n(t);let s=a.current;if(s){s.backtrackCount+=1;let m=t-1,p=i[m]?.questions??[],l={};p.forEach(v=>{l[v.id]=o[v.id]}),s.backtrackSnapshots[m]={fromPageIndex:t,snapshot:l}}let c=t-1;r(c),L(i,c)}},[t,r,n,i,o,a])}var ze=require("react");function $(e){let{setValues:t,setValidationErrors:r}=e;return(0,ze.useCallback)((n,i)=>{Be(n,i),t(o=>({...o,[n]:i})),r(o=>({...o,[n]:""}))},[t,r])}var Ye=require("react");function Ge(){u.success("Survey validation passed on submit")}function We(e){u.warn("Full survey validation failed on submit",{validation:e})}function N(e){u.error("Failed to run survey validation on submit",e)}function Ze(e){u.warn("Page validation failed",{errors:e})}function Xe(e,t){h({eventName:"page_time_spent",metadata:{pageIndex:e,durationMs:t}})}function O(e,t,r){h({eventName:"validation_error",metadata:{pageIndex:e,errors:t,attemptNumber:r}})}function j(e,t){let{survey:r,pages:n,values:i,currentPageIndex:o,setCurrentPageIndex:a,setValidationErrors:s,trackPageTime:c,trackOptionalSkips:m,checkBacktrackChanges:p,paginationRefs:l}=e,v=n[o],S=v?.questions??[];return(0,Ye.useCallback)(()=>{if(!r||!v)return;let g={};try{g=_(S,i,r.language)}catch(d){N(d)}let f=l.current;if(f){if(Object.keys(g).length>0){Ze(g);let d=(f.validationAttempt[o]||0)+1;f.validationAttempt[o]=d,f.validationErrorsCount+=1,f.validationHistory.push({pageIndex:o,errors:g,attemptNumber:d}),O(o,g,d),s(g);let x=Object.keys(g)[0];setTimeout(()=>{try{let y=A(x);y&&y.scrollIntoView({behavior:"smooth",block:"center"})}catch(y){I("Failed to scroll validation error element into view",y)}},50);return}s({}),delete f.validationAttempt[o],c(o),m(o),p(o),o<n.length-1?(Je(o),a(d=>d+1),L(n,o+1)):t()}},[r,v,S,i,o,a,s,c,m,p,n,t,l])}var rt=require("react");function Ke(e,t,r,n,i,o,a,s,c,m){h({eventName:"survey_session_summary",metadata:{maxVisitedPageIndex:t,totalDurationMs:r,completed:e,totalQuestionsCount:n,answeredQuestionsCount:i,skippedQuestionsCount:o,skippedQuestionIds:a,validationErrorsCount:s,backtrackCount:c,validationHistory:m}})}function et(e,t){h({eventName:"optional_question_skipped",metadata:{questionId:e,pageIndex:t}})}function tt(e,t,r){h({eventName:"backtrack_revisited",metadata:{fromPageIndex:e,toPageIndex:t,changedAnswers:r}})}function H(e){let{survey:t,pages:r,values:n,submit:i,currentPageIndex:o,setCurrentPageIndex:a,setValidationErrors:s,trackPageTime:c,trackOptionalSkips:m,checkBacktrackChanges:p,totalQuestionsCount:l,paginationRefs:v}=e;return(0,rt.useCallback)(async()=>{if(!t)return;qe();let S=null;try{S=je(r,n,t.language),S||Ge()}catch(f){N(f)}let g=v.current;if(g){if(S){We(S);let f=(g.validationAttempt[S.errorPageIndex]||0)+1;g.validationAttempt[S.errorPageIndex]=f,g.validationErrorsCount+=1,g.validationHistory.push({pageIndex:S.errorPageIndex,errors:S.errors,attemptNumber:f}),O(S.errorPageIndex,S.errors,f),s(S.errors),a(S.errorPageIndex),setTimeout(()=>{try{let d=A(S.firstErrorId);d&&d.scrollIntoView({behavior:"smooth",block:"center"})}catch(d){I("Failed to scroll validation error element into view",d)}},100);return}s({}),delete g.validationAttempt[o],c(o),m(o),p(o);try{let f=await i(n);if(f&&f.success&&!g.hasLoggedSummary){let d=performance.now()-g.sessionStartTime,x=[];r.forEach(k=>{k.questions.forEach(b=>{if(!b.required){let E=n[b.id];(E===void 0||E==="")&&x.push(b.id)}})});let y=x.length;Ke(!0,g.maxVisitedPageIndex,d,l,l-y,y,x,g.validationErrorsCount,g.backtrackCount,g.validationHistory),g.hasLoggedSummary=!0}}catch(f){$e(f)}}},[t,r,n,i,o,a,s,c,m,p,l,v])}var nt=require("react");function z(e,t,r){return(0,nt.useCallback)(n=>{if(!r.current)return;let i=r.current.backtrackSnapshots[n];if(i){let o=e[n]?.questions??[],a={},s=!1;o.forEach(c=>{let m=i.snapshot[c.id],p=t[c.id];m!==p&&(a[c.id]={oldValue:m??null,newValue:p??null},s=!0)}),s&&tt(i.fromPageIndex,n,a),delete r.current.backtrackSnapshots[n]}},[e,t,r])}var ot=require("react");function G(e,t){return(0,ot.useCallback)(r=>{(e[r]?.questions??[]).forEach(i=>{let o=!i.required,a=t[i.id];o&&(a===void 0||a==="")&&et(i.id,r)})},[e,t])}var it=require("react");function W(e){return(0,it.useCallback)(t=>{if(!e.current)return;let r=performance.now()-e.current.pageStartTime;Xe(t,r)},[e])}function st({survey:e,session:t}){let[r,n]=(0,R.useState)({}),[i,o]=(0,R.useState)({}),[a,s]=(0,R.useState)(0),c=e?.pages??[],p=c[a]?.questions??[],{submit:l,data:v,loading:S,error:g}=Oe(t,e),{progressPercentage:f,totalQuestionsCount:d,answeredQuestionsCount:x,isComplete:y}=Qe({survey:e,values:r,currentPageIndex:a}),k=(0,R.useRef)({pageStartTime:performance.now(),sessionStartTime:performance.now(),maxVisitedPageIndex:0,validationAttempt:{},backtrackSnapshots:{},hasLoggedSummary:!1,validationErrorsCount:0,backtrackCount:0,validationHistory:[]}),b=W(k),E=G(c,r),ct=z(c,r,k),w={survey:e,session:t,pages:c,currentPageIndex:a,setCurrentPageIndex:s,values:r,setValues:n,validationErrors:i,setValidationErrors:o,paginationRefs:k,trackPageTime:b,trackOptionalSkips:E,checkBacktrackChanges:ct,submit:l,totalQuestionsCount:d};q(w),B(w);let mt=$(w),pt=J(w),Z=H(w),lt=j(w,Z);return{currentPageIndex:a,values:r,validationErrors:i,currentQuestions:p,pages:c,onChange:mt,onBack:pt,onNext:lt,onSubmit:Z,progressPercentage:f,totalQuestionsCount:d,answeredQuestionsCount:x,isComplete:y,submitting:S,submitError:g,submitData:v}}function ut({options:e}={}){u.setEnabled(e?.debug??!1);let{survey:t,session:r,fetching:n,fetchError:i}=Se({instanceId:e?.instanceId,language:e?.language,placeholders:e?.placeholders}),{currentPageIndex:o,values:a,validationErrors:s,currentQuestions:c,onBack:m,onNext:p,onSubmit:l,onChange:v,progressPercentage:S,submitting:g,submitError:f,submitData:d}=st({survey:t,session:r}),x=(0,at.useCallback)(y=>{y.type==="NEXT"&&t&&o===t.pages.length-1&&(y={type:"SUBMIT"}),u.info(`Action dispatched: ${y.type}`,y);try{switch(y.type){case"NEXT":p();break;case"PREVIOUS":m();break;case"SUBMIT":l();break;case"CHANGE":v(y.payload.questionId,y.payload.value);break;default:break}}catch(k){u.error(`Error executing action: ${y.type}`,k)}},[p,m,l,v,t,o]);return{surveyQueryResults:{data:t,error:i,isLoading:n},submitSurveyResults:{data:d,error:f,isLoading:g},state:{currentPageIndex:o,currentQuestions:c,values:a,validationErrors:s,progressPercentage:S},onAction:x}}0&&(module.exports={useSurveySDK});
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useCallback as wt}from"react";import{useMemo as it}from"react";import{useQuery as st}from"@tanstack/react-query";import{QueryClient as Ze}from"@tanstack/react-query";var N=!1,We={debug:"background: #7f8c8d; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",info:"background: #2980b9; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",warn:"background: #f1c40f; color: #000; padding: 2px 5px; border-radius: 3px; font-weight: bold;",error:"background: #e74c3c; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",success:"background: #2ecc71; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",perf:"background: #9b59b6; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;",analytics:"background: #e20074; color: #fff; padding: 2px 5px; border-radius: 3px; font-weight: bold;"};function P(e,t,r){if(!N&&e!=="analytics")return;let o=new Date().toLocaleTimeString(),i=`%c[SDK:${e.toUpperCase()}]`,n=We[e];r!==void 0?console.log(`[${o}] ${i}`,n,t,r):console.log(`[${o}] ${i}`,n,t)}var u={setEnabled:e=>{N=e},isEnabled:()=>N,debug:(e,t)=>P("debug",e,t),info:(e,t)=>P("info",e,t),warn:(e,t)=>P("warn",e,t),error:(e,t)=>P("error",e,t),success:(e,t)=>P("success",e,t),analytics:(e,t)=>P("analytics",e,t),perf:e=>{P("perf",`${e.apiName} completed in ${e.durationMs.toFixed(2)}ms | Status: ${e.status}`,e)}};var R=new Ze({defaultOptions:{queries:{staleTime:1/0,refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchInterval:!1,retryDelay:5e3,retry:(e,t)=>{if(e>=3)return u.error("Query failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("404")||r.includes("422"))return u.error(`Query failed permanently due to client error (${r}). Skipping retry.`,t),!1}return u.warn(`Query failed. Retrying attempt ${e+1}/3...`,t),!0}},mutations:{networkMode:"always",retryDelay:5e3,retry:(e,t)=>{if(e>=3)return u.error("Mutation failed permanently after 3 attempts. Stopping retries.",t),!1;if(t instanceof Error){let r=t.message;if(r.includes("400")||r.includes("401")||r.includes("403")||r.includes("422"))return u.error("Mutation failed permanently due to validation/client error. Skipping retry.",t),!1}return u.warn(`Mutation failed. Retrying attempt ${e+1}/3...`,t),!0}}}});var W="https://custom-p0.feedbook.me/api/feedback/survey/cfm",Z="eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJBY2Nlc3MgVG9rZW4gR2VuZXJhdGVkIEJ5IFNwcmlua2xyIiwic3VydmV5SWQiOiI2YTJlNWM2NDFiOGRiMmY5MDQ2Nzg4ODUiLCJpc3MiOiJTUFJJTktMUiIsInR5cCI6IkpXVCIsInN1cnZleU1vZGUiOiJTVEFOREFSRCIsInN1cnZleUF1dGhlbnRpY2F0aW9uU3RhdGUiOiJOT1RfUkVRVUlSRUQiLCJkaXN0cmlidXRpb25FbnRpdHlJZCI6IjZhMmU1ZDEzNDRjYTkzZjc3YTVlMzcyNyIsImF1ZCI6IlNQUklOS0xSIiwibmJmIjoxNzgxNDIyMTc5LCJzY29wZSI6WyJSRUFEIiwiV1JJVEUiXSwic3RhdGljU3VydmV5IjoidHJ1ZSIsInN1cnZleVJlc3BvbmRlclNuVHlwZSI6IkVYVEVSTkFMX0FQUExJQ0FUSU9OIiwic3VydmV5TGFuZ3VhZ2UiOiJlbiIsInBhcnRuZXJJZCI6OTAwNCwidG9rZW5UeXBlIjoiQUNDRVNTIiwiYXV0aFR5cGUiOiJTVVJWRVlfUkVTUE9OU0UiLCJpYXQiOjE3ODE0MjMzNzksImp0aSI6InNwcmlua2xyIn0.B4ffi1szwM_xQKXTlr0kQc9mVOS4qVbB5e6ir4NFuCoOmNmsl3PB1QeFJ5jPaQ42s0KTpbufPam9ja0Z84CJ620l2WtuS1RModEv7ZtuMNLWOixzRxZMduC5-V7WV85H6gr1e-HzX7wgqrxTk2Z9iTr-8AVuczlwScarCfqLhA-JE_EXkFScHoehmH7QB5q5-BfcxU32iQNYOk5NyeEHGAAWkkyiGPdrbE27njPnhTunB3kKgCBvHHLq0KmgoN9x_KnrB53O_0Xai419TT5vkBWlu5a_uotZckX014eQpxYH02w_LeOF8iWEKYe6R9ge-6DSbelaJSt6U6O8Fq-aXw";function Xe(e){return`${W}?instanceId=${encodeURIComponent(e)}&draftPreview=false`}function X(e){let t=typeof e=="string"&&e.trim().length>0?e.trim():Z;return Xe(t)}function Ye(e){let t=(e??"").toUpperCase();return t==="TEXTFIELD"?"text":t==="RATING"||t==="SCALE"||t==="RATING_MATRIX"?"rating":"radio"}var Ke=["#e2001a","#e4251b","#ec610a","#f18b00","#f7b200","#fcd900","#d2dc00","#9fca00","#6bb300","#339a00","#008000"];function Y(e){return Ke[e]??"#e20074"}function et(e=[],t){let r=e.filter(o=>o.additional?.isHintText&&!o.hidden).map(o=>t&&o.translations?.[t]?.answerText||o.answerText||"").filter(Boolean);return r.length>=3?{minLabel:r[0],midLabel:r[1],maxLabel:r[2]}:{minLabel:r[0],maxLabel:r[1]}}function tt(e,t,r){if(t==="text")return[];let i=(e.answerDetails??[]).filter(n=>!n.hidden&&!n.additional?.isHintText);return i.length>0?i.map(a=>{let s=r&&a.translations?.[r]?.answerText||a.answerText||"",c=a.answerText??"",m=Number(c),p=Number.isFinite(m)&&c.trim()!==""?m:c,l={label:s,value:p};return t==="rating"&&typeof p=="number"&&(l.color=Y(p)),l}):t==="rating"?Array.from({length:11},(a,s)=>({label:String(s),value:s,color:Y(s)})):[]}function K(e,t,r){let o=Ye(e.answerType),{minLabel:i,midLabel:n,maxLabel:a}=et(e.answerDetails,t),s=tt(e,o,t),c=e.id??"",m=e.questionConfigs??[],p=m.find(b=>b.key==="REQUIRED")?.value?.[0]==="true",l=m.find(b=>b.key==="REQUIRED_ERROR_MESSAGE"),v=l?.value?.[0];t&&l?.translations?.[t]?.value?.[0]&&(v=l.translations[t].value[0]);let g=m.find(b=>b.key==="CONTENT_TYPE")?.childConfigs?.find(b=>b.key==="MAX_CHARACTER_COUNT"),f=g?.value?.[0]?Number(g.value[0]):void 0,d;o==="rating"&&n&&(s.length===11?d=7.5:d=(s.length-1)/2);let x=t&&e.translations?.[t]?.questionRichText||t&&e.translations?.[t]?.questionText||e.questionRichText||e.questionText||"";r&&(x=x.replace(/\{\{(\w+)\}\}/g,(b,E)=>r[E]!==void 0?r[E]:b));let y;if(o==="text"){let b=e.answerDetails?.[0];b&&(y=t&&b.translations?.[t]?.answerText||b.answerText)}return{id:c,text:x,type:o,options:s,required:p,...v?{requiredErrorMessage:v}:{},...i?{minLabel:i}:{},...n?{midLabel:n}:{},...d!==void 0?{midLabelIndex:d}:{},...a?{maxLabel:a}:{},...f!==void 0?{maxCharacterCount:f}:{},...y?{placeholder:y}:{}}}var rt={en:"English",hi:"Hindi",de:"Deutsch",es:"Espa\xF1ol",fr:"Fran\xE7ais",bn:"Bengali",gu:"Gujarati",it:"Italiano",ja:"\u65E5\u672C\u8A9E",ko:"\uD55C\uAD6D\uC5B4",mr:"Marathi",pa:"Punjabi",ta:"Tamil",te:"Telugu",ur:"Urdu",zh:"\u4E2D\u6587"};function nt(e){let t=e.toLowerCase().trim();return rt[t]||e.toUpperCase()}function ee(e){let t=e.cfmSurveyDTO,r=new Set,o=t?.baseLanguage??"en";return r.add(o),t&&Array.isArray(t.surveyPages)&&t.surveyPages.forEach(i=>{(i.questionHolders??[]).forEach(n=>{let a=n.question;a&&a.translations&&Object.keys(a.translations).forEach(s=>{r.add(s)})})}),Array.from(r).map(i=>({code:i,name:nt(i)}))}function te(e,t,r){let o=e.cfmSurveyDTO;return!o||!Array.isArray(o.surveyPages)?[]:o.surveyPages.map((i,n)=>{let a=(i.questionHolders??[]).map(s=>s.question).filter(s=>!!s).map(s=>K(s,t,r));return{id:`page_${n}`,title:`Page ${n+1}`,questions:a}})}function re(e){return e.instanceId?.trim()?{instanceId:e.instanceId.trim(),language:e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en"}:null}function ot(e,t){return t??e.surveyLanguage??e.cfmSurveyDTO?.baseLanguage??"en"}function ne(e,t,r){let o=ot(e,t),i=ee(e),n=te(e,o,r);return{id:e.cfmSurveyDTO?.id??"",language:o,languages:i,pages:n}}function oe(e){u.info("Starting survey layout API fetch...",{url:e})}function O(e,t,r){u.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,success:!1})}function ie(e,t,r,o){u.perf({apiName:"GET Survey Layout",durationMs:e,status:t,url:r,payloadSize:o,success:!0})}function se(e){u.success("Raw survey layout fetched successfully",e)}function ae(e){u.error("Failed to fetch raw survey layout",e)}function ue(){u.warn("Cannot map survey: apiResponse is null or undefined")}function ce(e){u.success("Mapped survey layout successfully",e)}function me(e){u.error("Failed to map survey layout",e)}function h(e){if(e.eventName==="survey_session_summary"){let{completed:t,totalDurationMs:r,maxVisitedPageIndex:o,totalQuestionsCount:i,answeredQuestionsCount:n,skippedQuestionsCount:a,skippedQuestionIds:s,validationErrorsCount:c,backtrackCount:m}=e.metadata;u.analytics(`Event: ${e.eventName} - SESSION SUMMARY TABLE:`);let p=[{Metric:"Completion Status",Value:t?"COMPLETED \u2705":"ABANDONED \u274C"},{Metric:"Total Time Spent",Value:`${(r/1e3).toFixed(2)} seconds`},{Metric:"Max Page Index Reached",Value:`${o}`},{Metric:"Total Questions",Value:i},{Metric:"Answered Questions",Value:n},{Metric:"Skipped Optional Questions",Value:a},{Metric:"Skipped Question IDs",Value:s.join(", ")||"None"},{Metric:"Validation Errors Triggered",Value:c},{Metric:"Backtrack Count",Value:m},{Metric:"Validation Error History",Value:e.metadata.validationHistory?.map(l=>`[Page ${l.pageIndex}] Attempt ${l.attemptNumber}: ${Object.keys(l.errors).join(", ")}`).join(" | ")||"NO Validation Erros Occurred"}];console.table(p)}else u.analytics(`Event: ${e.eventName}`,e.metadata)}function pe(e,t,r,o){h({eventName:"survey_fetch_latency",metadata:{durationMs:e,status:t,success:!0,url:r,payloadSize:o}})}function V(e,t,r){h({eventName:"api_error",metadata:{apiName:"GET Survey Layout",status:e,url:t,errorMessage:r}})}async function at(e){let t=performance.now();oe(e);try{let r=await fetch(e,{method:"GET",headers:{Accept:"application/json"},cache:"force-cache"}),o=performance.now()-t;if(!r.ok)throw O(o,r.status,e),V(r.status,e,`Survey fetch failed (${r.status})`),new Error(`Survey fetch failed (${r.status})`);let i=await r.json(),n=JSON.stringify(i),s=`${(new Blob([n]).size/1024).toFixed(2)} KB`;return ie(o,r.status,e,s),pe(o,r.status,e,s),se(i),i}catch(r){let o=performance.now()-t;throw O(o,"FAILED",e),V("FAILED",e,r?.message||String(r)),ae(r),r}}function le(e){let t=X(e?.instanceId),r=e?.language,o=e?.placeholders,{data:i,error:n,isLoading:a,isSuccess:s}=st({queryKey:["survey",t],queryFn:()=>at(t),enabled:!!t},R),c=it(()=>{if(!s)return{survey:null,session:null};if(!i)return ue(),{survey:null,session:null};try{let m=ne(i,r,o),p=re(i),l=p?{...p,language:m.language}:null;return ce(m),{survey:m,session:l}}catch(m){return me(m),{survey:null,session:null}}},[i,s,r]);return{survey:c.survey,session:c.session,fetching:a,fetchError:n}}import{useState as z,useRef as It}from"react";import{useCallback as ct}from"react";import{useMutation as mt}from"@tanstack/react-query";function ge(e,t){u.info("Starting survey response HTTP POST...",{url:e,requestBody:t})}function fe(e,t){u.warn(e,t)}function de(e,t,r,o,i){u.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:o,responseSize:i,success:!0})}function F(e,t,r,o){u.perf({apiName:"POST Submit Response",durationMs:e,status:t,url:r,requestSize:o,success:!1})}function ye(e){u.success("Survey response submitted successfully",{responseId:e})}function Se(e,t){u.error(e,t)}function be(e){u.debug("Resolved raw inputs to submit schema:",e)}function ve(e){u.debug("Constructed JSON request body:",e)}function xe(e){u.error("Failed to execute submit callback",e)}function he(e,t,r,o,i){h({eventName:"survey_submit_latency",metadata:{durationMs:e,status:t,success:!0,url:r,requestSize:o,responseSize:i}})}function M(e,t,r){h({eventName:"api_error",metadata:{apiName:"POST Submit Response",status:e,url:t,errorMessage:r}})}var ke="https://custom-p0.feedbook.me/api/feedback/survey/responseV2";function Ee(e,t="en"){let r=new URLSearchParams({instanceId:e,surveySubmitted:"true",surveyLanguage:t});return`${ke}?${r.toString()}`}function Pe(e,t){let r={};for(let o of t){let i=e[o.id];if(i==null)continue;let n=String(i);r[o.id]=[n]}return{questionToAnswers:r,quesIdVsAttachmentDetails:{},optionLevelAnswers:{},conjointTasks:[]}}function ut(e){return typeof e=="object"&&e!==null&&"instanceId"in e&&"answers"in e}function Ie(e,t,r){if(ut(e))return{...e,surveyLanguage:e.surveyLanguage??t?.language??"en",questions:e.questions??r?.pages.flatMap(o=>o.questions)??[]};if(!t?.instanceId)throw new Error("Survey session not ready. Fetch survey before submitting.");return{answers:e,instanceId:t.instanceId,surveyLanguage:t.language??"en",questions:r?.pages.flatMap(o=>o.questions)??[]}}async function pt({url:e,requestBody:t}){let r=performance.now(),i=`${(new Blob([JSON.stringify(t)]).size/1024).toFixed(2)} KB`;ge(e,t);try{let n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await n.json().catch(l=>(fe("Failed to parse JSON response during submission",l),null)),s=performance.now()-r,m=`${((a?new Blob([JSON.stringify(a)]).size:0)/1024).toFixed(2)} KB`;if(!n.ok)throw F(s,n.status,e,i),M(n.status,e,`Submit failed (${n.status}): ${JSON.stringify(a)}`),new Error(`Submit failed (${n.status}): ${JSON.stringify(a)}`);let p=a?.responseId??"";return de(s,n.status,e,i,m),he(s,n.status,e,i,m),ye(p),{success:!0,responseId:p}}catch(n){let a=performance.now()-r;throw F(a,"FAILED",e,i),M("FAILED",e,n?.message||String(n)),Se("Failed to submit survey response",n),n}}function we(e,t){let r=mt({mutationFn:({url:i,requestBody:n})=>pt({url:i,requestBody:n})},R);return{submit:ct(async i=>{try{let n=Ie(i,e,t);be(n);let a=n.surveyLanguage??"en",s=Pe(n.answers,n.questions??[]);ve(s);let c=Ee(n.instanceId,a);return await r.mutateAsync({url:c,requestBody:s})}catch(n){throw xe(n),n}},[e,t,r]),data:r.data??null,loading:r.isPending,error:r.error}}import{useState as lt,useEffect as gt,useMemo as ft}from"react";function Te(e){return!e||!Array.isArray(e.pages)?0:e.pages.reduce((t,r)=>t+(r.questions?.length??0),0)}function Re(e,t,r=0){if(!e||!t||!Array.isArray(e.pages))return 0;let o=0;return e.pages.forEach((i,n)=>{Array.isArray(i.questions)&&(n<r?o+=i.questions.length:i.questions.forEach(a=>{let s=t[a.id];s!=null&&s!==""&&o++}))}),o}function Ae(e,t){return t<=0?0:Math.min(100,Math.max(0,Math.round(e/t*100)))}function Ce({survey:e,values:t,currentPageIndex:r=0}){let[o,i]=lt(0);return gt(()=>{r>o&&i(r)},[r,o]),ft(()=>{let n=Te(e),a=Re(e,t,o),s=Ae(a,n),c=n>0&&a===n;return{totalQuestionsCount:n,answeredQuestionsCount:a,progressPercentage:s,isComplete:c}},[e,t,o])}import{useEffect as dt}from"react";function Q(e){let{currentPageIndex:t,paginationRefs:r}=e;dt(()=>{r.current&&(r.current.pageStartTime=performance.now())},[t,r])}import{useEffect as yt}from"react";function U(e){let{currentPageIndex:t,paginationRefs:r}=e;yt(()=>{r.current&&t>r.current.maxVisitedPageIndex&&(r.current.maxVisitedPageIndex=t)},[t,r])}import{useCallback as bt}from"react";function Le(e,t){u.info(`Answer changed for question: ${e}`,{value:t})}function I(e,t){u.warn(e,t)}function Ne(){u.info("Initiating survey submission...")}function Oe(e){u.info(`Navigating back from page index: ${e}`)}function Ve(e){u.info(`Navigating next from page index: ${e}`)}function Fe(e){u.error("Error encountered during pagination submit trigger",e)}function D(e,t,r){let o={};return e.forEach(i=>{i.required&&(t[i.id]===void 0||t[i.id]==="")&&(o[i.id]=i.requiredErrorMessage??(r?.startsWith("de")?"Beantworten Sie bitte diese Frage bevor Sie fortfahren.":"Please answer this question before you proceed."))}),o}function Me(e,t,r){let o={},i="",n=-1;for(let a=0;a<e.length;a++){let s=D(e[a].questions,t,r);Object.keys(s).length>0&&(o={...o,...s},n===-1&&(n=a,i=Object.keys(s)[0]))}return n!==-1?{errors:o,errorPageIndex:n,firstErrorId:i}:null}function T(e){return typeof document>"u"?null:document.getElementById(e)||null}function St(e){return e.closest("main")||e.closest("form")||e.parentElement||e}function A(e,t){try{let o=e[t]?.questions?.[0];o?setTimeout(()=>{try{let i=T(o.id);i?St(i).scrollIntoView({behavior:"smooth",block:"start"}):window.scrollTo({top:0,behavior:"smooth"})}catch(i){I("Failed to scroll page first question into view",i)}},50):window.scrollTo({top:0,behavior:"smooth"})}catch(r){I("Failed to trigger scroll navigation",r)}}function B(e){let{currentPageIndex:t,setCurrentPageIndex:r,trackPageTime:o,pages:i,values:n,paginationRefs:a}=e;return bt(()=>{if(t>0){Oe(t),o(t);let s=a.current;if(s){s.backtrackCount+=1;let m=t-1,p=i[m]?.questions??[],l={};p.forEach(v=>{l[v.id]=n[v.id]}),s.backtrackSnapshots[m]={fromPageIndex:t,snapshot:l}}let c=t-1;r(c),A(i,c)}},[t,r,o,i,n,a])}import{useCallback as vt}from"react";function q(e){let{setValues:t,setValidationErrors:r}=e;return vt((o,i)=>{Le(o,i),t(n=>({...n,[o]:i})),r(n=>({...n,[o]:""}))},[t,r])}import{useCallback as xt}from"react";function Qe(){u.success("Survey validation passed on submit")}function Ue(e){u.warn("Full survey validation failed on submit",{validation:e})}function C(e){u.error("Failed to run survey validation on submit",e)}function De(e){u.warn("Page validation failed",{errors:e})}function Be(e,t){h({eventName:"page_time_spent",metadata:{pageIndex:e,durationMs:t}})}function L(e,t,r){h({eventName:"validation_error",metadata:{pageIndex:e,errors:t,attemptNumber:r}})}function _(e,t){let{survey:r,pages:o,values:i,currentPageIndex:n,setCurrentPageIndex:a,setValidationErrors:s,trackPageTime:c,trackOptionalSkips:m,checkBacktrackChanges:p,paginationRefs:l}=e,v=o[n],S=v?.questions??[];return xt(()=>{if(!r||!v)return;let g={};try{g=D(S,i,r.language)}catch(d){C(d)}let f=l.current;if(f){if(Object.keys(g).length>0){De(g);let d=(f.validationAttempt[n]||0)+1;f.validationAttempt[n]=d,f.validationErrorsCount+=1,f.validationHistory.push({pageIndex:n,errors:g,attemptNumber:d}),L(n,g,d),s(g);let x=Object.keys(g)[0];setTimeout(()=>{try{let y=T(x);y&&y.scrollIntoView({behavior:"smooth",block:"center"})}catch(y){I("Failed to scroll validation error element into view",y)}},50);return}s({}),delete f.validationAttempt[n],c(n),m(n),p(n),n<o.length-1?(Ve(n),a(d=>d+1),A(o,n+1)):t()}},[r,v,S,i,n,a,s,c,m,p,o,t,l])}import{useCallback as ht}from"react";function qe(e,t,r,o,i,n,a,s,c,m){h({eventName:"survey_session_summary",metadata:{maxVisitedPageIndex:t,totalDurationMs:r,completed:e,totalQuestionsCount:o,answeredQuestionsCount:i,skippedQuestionsCount:n,skippedQuestionIds:a,validationErrorsCount:s,backtrackCount:c,validationHistory:m}})}function _e(e,t){h({eventName:"optional_question_skipped",metadata:{questionId:e,pageIndex:t}})}function Je(e,t,r){h({eventName:"backtrack_revisited",metadata:{fromPageIndex:e,toPageIndex:t,changedAnswers:r}})}function J(e){let{survey:t,pages:r,values:o,submit:i,currentPageIndex:n,setCurrentPageIndex:a,setValidationErrors:s,trackPageTime:c,trackOptionalSkips:m,checkBacktrackChanges:p,totalQuestionsCount:l,paginationRefs:v}=e;return ht(async()=>{if(!t)return;Ne();let S=null;try{S=Me(r,o,t.language),S||Qe()}catch(f){C(f)}let g=v.current;if(g){if(S){Ue(S);let f=(g.validationAttempt[S.errorPageIndex]||0)+1;g.validationAttempt[S.errorPageIndex]=f,g.validationErrorsCount+=1,g.validationHistory.push({pageIndex:S.errorPageIndex,errors:S.errors,attemptNumber:f}),L(S.errorPageIndex,S.errors,f),s(S.errors),a(S.errorPageIndex),setTimeout(()=>{try{let d=T(S.firstErrorId);d&&d.scrollIntoView({behavior:"smooth",block:"center"})}catch(d){I("Failed to scroll validation error element into view",d)}},100);return}s({}),delete g.validationAttempt[n],c(n),m(n),p(n);try{let f=await i(o);if(f&&f.success&&!g.hasLoggedSummary){let d=performance.now()-g.sessionStartTime,x=[];r.forEach(k=>{k.questions.forEach(b=>{if(!b.required){let E=o[b.id];(E===void 0||E==="")&&x.push(b.id)}})});let y=x.length;qe(!0,g.maxVisitedPageIndex,d,l,l-y,y,x,g.validationErrorsCount,g.backtrackCount,g.validationHistory),g.hasLoggedSummary=!0}}catch(f){Fe(f)}}},[t,r,o,i,n,a,s,c,m,p,l,v])}import{useCallback as kt}from"react";function $(e,t,r){return kt(o=>{if(!r.current)return;let i=r.current.backtrackSnapshots[o];if(i){let n=e[o]?.questions??[],a={},s=!1;n.forEach(c=>{let m=i.snapshot[c.id],p=t[c.id];m!==p&&(a[c.id]={oldValue:m??null,newValue:p??null},s=!0)}),s&&Je(i.fromPageIndex,o,a),delete r.current.backtrackSnapshots[o]}},[e,t,r])}import{useCallback as Et}from"react";function j(e,t){return Et(r=>{(e[r]?.questions??[]).forEach(i=>{let n=!i.required,a=t[i.id];n&&(a===void 0||a==="")&&_e(i.id,r)})},[e,t])}import{useCallback as Pt}from"react";function H(e){return Pt(t=>{if(!e.current)return;let r=performance.now()-e.current.pageStartTime;Be(t,r)},[e])}function $e({survey:e,session:t}){let[r,o]=z({}),[i,n]=z({}),[a,s]=z(0),c=e?.pages??[],p=c[a]?.questions??[],{submit:l,data:v,loading:S,error:g}=we(t,e),{progressPercentage:f,totalQuestionsCount:d,answeredQuestionsCount:x,isComplete:y}=Ce({survey:e,values:r,currentPageIndex:a}),k=It({pageStartTime:performance.now(),sessionStartTime:performance.now(),maxVisitedPageIndex:0,validationAttempt:{},backtrackSnapshots:{},hasLoggedSummary:!1,validationErrorsCount:0,backtrackCount:0,validationHistory:[]}),b=H(k),E=j(c,r),je=$(c,r,k),w={survey:e,session:t,pages:c,currentPageIndex:a,setCurrentPageIndex:s,values:r,setValues:o,validationErrors:i,setValidationErrors:n,paginationRefs:k,trackPageTime:b,trackOptionalSkips:E,checkBacktrackChanges:je,submit:l,totalQuestionsCount:d};U(w),Q(w);let He=q(w),ze=B(w),G=J(w),Ge=_(w,G);return{currentPageIndex:a,values:r,validationErrors:i,currentQuestions:p,pages:c,onChange:He,onBack:ze,onNext:Ge,onSubmit:G,progressPercentage:f,totalQuestionsCount:d,answeredQuestionsCount:x,isComplete:y,submitting:S,submitError:g,submitData:v}}function Tt({options:e}={}){u.setEnabled(e?.debug??!1);let{survey:t,session:r,fetching:o,fetchError:i}=le({instanceId:e?.instanceId,language:e?.language,placeholders:e?.placeholders}),{currentPageIndex:n,values:a,validationErrors:s,currentQuestions:c,onBack:m,onNext:p,onSubmit:l,onChange:v,progressPercentage:S,submitting:g,submitError:f,submitData:d}=$e({survey:t,session:r}),x=wt(y=>{y.type==="NEXT"&&t&&n===t.pages.length-1&&(y={type:"SUBMIT"}),u.info(`Action dispatched: ${y.type}`,y);try{switch(y.type){case"NEXT":p();break;case"PREVIOUS":m();break;case"SUBMIT":l();break;case"CHANGE":v(y.payload.questionId,y.payload.value);break;default:break}}catch(k){u.error(`Error executing action: ${y.type}`,k)}},[p,m,l,v,t,n]);return{surveyQueryResults:{data:t,error:i,isLoading:o},submitSurveyResults:{data:d,error:f,isLoading:g},state:{currentPageIndex:n,currentQuestions:c,values:a,validationErrors:s,progressPercentage:S},onAction:x}}export{Tt as useSurveySDK};
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorer02/cfm-survey-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
|
+
"module": "dist/index.mjs",
|
|
5
6
|
"types": "dist/index.d.ts",
|
|
6
7
|
"bin": {
|
|
7
8
|
"cfm-sdk": "./dist/cli/index.js"
|
|
@@ -12,9 +13,8 @@
|
|
|
12
13
|
"postinstall.js"
|
|
13
14
|
],
|
|
14
15
|
"scripts": {
|
|
15
|
-
"build": "
|
|
16
|
+
"build": "tsup",
|
|
16
17
|
"lint": "tsc --noEmit",
|
|
17
|
-
"prepare": "yarn build",
|
|
18
18
|
"postinstall": "node postinstall.js",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"test:watch": "vitest"
|
|
@@ -26,10 +26,11 @@
|
|
|
26
26
|
"@testing-library/jest-dom": "^6.4.2",
|
|
27
27
|
"@testing-library/react": "^14.2.1",
|
|
28
28
|
"@testing-library/user-event": "^14.5.2",
|
|
29
|
-
"@types/react": "^
|
|
29
|
+
"@types/react": "^17.0.0",
|
|
30
30
|
"@tanstack/react-query": "^5.0.0",
|
|
31
31
|
"jsdom": "^24.0.0",
|
|
32
|
-
"
|
|
32
|
+
"tsup": "^8.0.2",
|
|
33
|
+
"typescript": "^6.0.0",
|
|
33
34
|
"vitest": "^1.3.1"
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyticsTracker.d.ts","sourceRoot":"","sources":["../../src/analytics/analyticsTracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,QA4C/C"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.trackEvent = trackEvent;
|
|
4
|
-
const logger_1 = require("../logger/logger");
|
|
5
|
-
function trackEvent(event) {
|
|
6
|
-
if (event.eventName === 'survey_session_summary') {
|
|
7
|
-
const { completed, totalDurationMs, maxVisitedPageIndex, totalQuestionsCount, answeredQuestionsCount, skippedQuestionsCount, skippedQuestionIds, validationErrorsCount, backtrackCount, } = event.metadata;
|
|
8
|
-
// Always log to console with Heading as ANALYTICS
|
|
9
|
-
logger_1.sdkLogger.analytics(`Event: ${event.eventName} - SESSION SUMMARY TABLE:`);
|
|
10
|
-
const summaryTable = [
|
|
11
|
-
{ Metric: 'Completion Status', Value: completed ? 'COMPLETED ✅' : 'ABANDONED ❌' },
|
|
12
|
-
{ Metric: 'Total Time Spent', Value: `${(totalDurationMs / 1000).toFixed(2)} seconds` },
|
|
13
|
-
{ Metric: 'Max Page Index Reached', Value: `${maxVisitedPageIndex}` },
|
|
14
|
-
{ Metric: 'Total Questions', Value: totalQuestionsCount },
|
|
15
|
-
{ Metric: 'Answered Questions', Value: answeredQuestionsCount },
|
|
16
|
-
{ Metric: 'Skipped Optional Questions', Value: skippedQuestionsCount },
|
|
17
|
-
{ Metric: 'Skipped Question IDs', Value: skippedQuestionIds.join(', ') || 'None' },
|
|
18
|
-
{ Metric: 'Validation Errors Triggered', Value: validationErrorsCount },
|
|
19
|
-
{ Metric: 'Backtrack Count', Value: backtrackCount },
|
|
20
|
-
{
|
|
21
|
-
Metric: 'Validation Error History',
|
|
22
|
-
Value: event.metadata.validationHistory
|
|
23
|
-
?.map(h => `[Page ${h.pageIndex}] Attempt ${h.attemptNumber}: ${Object.keys(h.errors).join(', ')}`)
|
|
24
|
-
.join(' | ') || 'NO Validation Erros Occurred',
|
|
25
|
-
},
|
|
26
|
-
];
|
|
27
|
-
console.table(summaryTable);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
// Always log to console with Heading as ANALYTICS
|
|
31
|
-
logger_1.sdkLogger.analytics(`Event: ${event.eventName}`, event.metadata);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=analyticsTracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyticsTracker.js","sourceRoot":"","sources":["../../src/analytics/analyticsTracker.ts"],"names":[],"mappings":";;AAGA,gCA4CC;AA/CD,6CAA6C;AAG7C,SAAgB,UAAU,CAAC,KAAqB;IAC9C,IAAI,KAAK,CAAC,SAAS,KAAK,wBAAwB,EAAE,CAAC;QACjD,MAAM,EACJ,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,GACf,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEnB,kDAAkD;QAClD,kBAAS,CAAC,SAAS,CAAC,UAAU,KAAK,CAAC,SAAS,2BAA2B,CAAC,CAAC;QAE1E,MAAM,YAAY,GAAG;YACnB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE;YACjF,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE;YACvF,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,GAAG,mBAAmB,EAAE,EAAE;YACrE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB,EAAE;YACzD,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,sBAAsB,EAAE;YAC/D,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,EAAE;YACtE,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;YAClF,EAAE,MAAM,EAAE,6BAA6B,EAAE,KAAK,EAAE,qBAAqB,EAAE;YACvE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE;YACpD;gBACE,MAAM,EAAE,0BAA0B;gBAClC,KAAK,EACH,KAAK,CAAC,QAAQ,CAAC,iBAAiB;oBAC9B,EAAE,GAAG,CACH,CAAC,CAAC,EAAE,CACF,SAAS,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F;qBACA,IAAI,CAAC,KAAK,CAAC,IAAI,8BAA8B;aACnD;SACF,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,kBAAS,CAAC,SAAS,CAAC,UAAU,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
|